我是新来的。无论如何。我试图从包含少量关键字的文本文件中搜索文本文件(包含10个句子)中的单词。基本上我试图找到file2中的一个关键字是否包含在file1中。我尝试过,但似乎是按线而不是单词进行比较。如果有人能帮我这个?感谢。
int main()
{
bool Found;
int i = 0;
int j = 0;
string str;
ifstream file;
file.open("words.txt", ios::in | ios::binary);
string str2;
ifstream file2;
file2.open("M4.txt", ios::in | ios::binary);
while (!file.eof() && !Found) {
getline(file, str, ' ');
}
while (!file2.eof() && !Found) {
getline(file2, str2, ' ');
}
// if (str == str2)
if (file.get() == file2.get()) {
cout << "This order is valid. M3" << endl;
} else {
cout << "This order is invalid. M3" << endl;
}
system("pause");
return 0;
}
我希望有人可以帮忙解决这个问题。在这里呆了几个星期:(
答案 0 :(得分:1)
这里有两个问题:如何将文件拆分为标记,以及如何搜索集合的元素,标准库为两者提供了解决方案。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
int main()
{
using It = std::istream_iterator<std::string>;
std::ifstream text_file("words.txt");
std::ifstream words_file("M4.txt");
std::vector<std::string> text{It(text_file), It()};
std::vector<std::string> words{It(words_file), It()};
bool result = std::find_first_of(
text.begin(), text.end(),
words.begin(), words.end()
) != text.end();
std::cout << result << '\n';
}
如果您需要知道哪些字词匹配,可以使用std::set
s或sort
向量,然后使用std::set_intersection
创建新范围
std::vector<std::string> result;
std::sort(text.begin(), text.end());
std::sort(words.begin(), words.end());
std::set_intersection(
text.begin(), text.end(),
words.begin(), words.end(),
std::back_inserter(result)
);
for (auto& s : result)
std::cout << s << '\n';