C/C++

Определить встречается ли в последовательности группа букв 'one', определить последнее вхождение этой группы

Дана непустая последовательность слов (не более 40), в каждом слове не более 10 символов. Слова разделены пробелом, за последним словом точка. Определить: а) встречается ли в последовательности группа букв 'one'. Найти последнее вхождение этой группы; Мне сказали, что здесь нужно найти сначала последнее слово, в котором встречается эта группа букв "one", а потом вывести позицию, с которой начинается вхождение one(т. е фактически позицию буквы "o") в этом конкретном слове, а не из общей последовательности. Я пробовала использовать функцию strtok, но с ней не получается. Strstr определяет вхождение из общей последовательности. Как вывести слово, в котором встречается one?
На C++ подойдёт?

#include <iostream>
#include <string>
#include <sstream>
#include <stack>
using namespace std;
int main() {
cout << "String: ";
string line;
getline(cin, line);
if (line.find("one") != string::npos) {
istringstream iss(line);
stack<string> box;
string token;
while (iss >> token) box.push(token);
while (!box.empty() && box.top().find("one") == string::npos) box.pop();
if (!box.empty()) {
cout
<< "Token: " << box.top() << '\n'
<< "Position: " << box.top().find("one") + 1 << '\n';
}
} else puts("Not found!");
system("pause > nul");
}
Adilet Dolotaliev
Adilet Dolotaliev
86 704
Лучший ответ
Игорь Суховой программа, конечно, работает, но я на 1 курсе универа только и мы такое не изучали еще ( плюс нам нужно использовать хранение текста в массиве
strtok не подойдет.
strstr - можно использовать. Но strstr возвращает первое вхождение в строку.

Если хотите решение похитрее - переверните исходную строку, и найдите в ней с помощью strstr первое вхождение слова "eno" (перевернутое "one"). Тогда индекс последнего вхождения one будет равен strlen( str ) - индекс_первого_вхождения_"eno" - 1.

А можно и с помощью strstr несколько раз пройтись по массиву.
strstr возвращает указатель на найденную подстроку в строке.

То есть можно написать цикл в духе
char *ptr = NULL;
char * result = NULL;
for( ptr = strstr( str, "one" ); ptr != NULL; ptr = strstr( ptr + strlen( "one" ), "one" ) ) // то есть после каждого найденного one мы переходим к поиску в следующей части массива
{
result = ptr;
}

на последней итерации ptr станет равным NULL, а result будет хранить последнее валидное значение - последнее вхождение "one" в строку.