Я реализую функцию, в которой пользователь может искать слово в векторе. Единственная проблема заключается в том, что моя функция поиска находит только определенные слова, и я не знаю, почему.
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 файле, и я не совсем уверен, почему. Я посмотрел на него, и похоже, что он игнорирует первое слово и игнорирует каждое последнее слово в каждом предложении.
У вашего вектора будут дубликаты, поэтому он найдет только первые вхождения слов "есть" и "вы" до того, как ваш цикл разрывается. Логически, в этом разделе кода нет ничего плохого, хотя лучше было бы написать:
#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;
}