phrase[i] == phrase[i]
Ну, это просто избыточно. Это всегда будет возвращать true для вектора, содержащего строки.
for(int i = 0; (...); i++){
while( (...) ){
i++;
}
}
Вы изменяете переменную i
дважды в этом единственном for loop
. Один раз в третьем параметре for
и один раз во внутреннем while loop
. Это почти никогда не хорошая идея .
Здесь происходит то, что вы устанавливаете i=0
, а затем немедленно устанавливаете его так, чтобы он указывал на последний элемент вектора (поскольку второе условие в while
всегда выполняется).
Затем вы выводите этот элемент на консоль, которая является последней строкой вашего текстового файла.
То, что вы хотите сделать, это:
1. Загрузите текстовый файл построчно в вектор.
2. Каждый элемент вектора будет содержать одну строку.
3. Разбейте каждую строку на вектор СЛОВ (через пробел).
4. Работа с результирующим вектором.
или ферапс:
1. Загрузите файл слово за словом в начале.
vector<string> words;
copy( istream_iterator<string>{YourFileStream}, istream_iterator<string>{}, back_inserter{words} ); // this will copy the content of file directly into vector, white-space-separated (no need for while loop to do it)
for ( auto i = phrase.begin(); i != phrase.end(); ++i ) // it's the proper c++ way of iterating over a vector. very similar, but variable i will point to every element of vector in order ( not just to the index of an element )
{
// do some work on *i. at least:
std::cout << *i; // dereference operator (*) is needed here, since i doesn't hold index of an element, it's a "pointer" to an element
}
Если вам нужен первый подход (для различения слов в разных строках), здесь вы можете найти несколько отличных способов разделения строки любым разделителем (например, пробел): Самый элегантный способ итерации слова строки