Поисковое слово не найдено в векторе?

0

Я реализую функцию, в которой пользователь может искать слово в векторе. Единственная проблема заключается в том, что моя функция поиска находит только определенные слова, и я не знаю, почему.

 ifstream in("testdata.txt");
string word1;
vector<string> individual_words;
while (in >> word1)
{
    individual_words.push_back(word1);
}

Внутри файла testdata.txt есть:

Hello how are you
Good are you well?
Snazzy piece of toast

Вот код, где я сравниваю два слова.

string search_word;

 while (cin >> search_word)
    {

        for (int f=0; f < individual_words.size(); f ++)
        {
            cout << "individual words: " << individual_words[f] <<endl;
            cout << "search word: " << search_word;
            if (search_word == individual_words[f])
            {
                cout << " FOUND THE SAME WORD\n!";
                break;
            }


        }
}

По какой-то причине он захватывает только определенные слова в TXT файле, и я не совсем уверен, почему. Я посмотрел на него, и похоже, что он игнорирует первое слово и игнорирует каждое последнее слово в каждом предложении.

Теги:
words

1 ответ

0

У вашего вектора будут дубликаты, поэтому он найдет только первые вхождения слов "есть" и "вы" до того, как ваш цикл разрывается. Логически, в этом разделе кода нет ничего плохого, хотя лучше было бы написать:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main() 
{
    // simplified for demonstration purposes
    string test = "Hello how are you\nGood are you well?\nSnazzy piece of toast";
    istringstream iss(test);
    vector<string> words;
    copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(words));

    string search_word;
    while (cin >> search_word)
    {
        // this works, but is unnecessary
        /*for (int f=0; f < words.size(); f ++)
        {
            cout << "individual words: " << words[f] <<endl;
            cout << "search word: " << search_word;
            if (search_word == words[f])
            {
                cout << " FOUND THE SAME WORD\n!";
                break;
            }
        }*/

        // this is a better approach
        vector<string>::iterator it = find(words.begin(), words.end(), search_word);
        if (it != words.end())
        {
            cout << "Found the word:  " << *it << endl;
        }
        else
        {
            cout << "Not found!" << endl;
        }
    }
    return 0;
}
  • 0
    Если я хочу открыть какой-либо файл, такой как мой файл "testdata.txt", я просто сделаю строку test = "testdata.txt". (Я понятия не имею, возможно ли это вообще). РЕДАКТИРОВАТЬ: Перефразируя мой вопрос, как я могу сделать тест строки узнающим, каково содержимое файла?
  • 0
    Эта часть вашего кода в порядке. Я просто использовал поток строк, чтобы упростить тест до того места, где у вас действительно возникла проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню