所以我基本上试图弄清楚如何将文本文件中的单词与数组中的一堆单词进行比较。我不知道这样做的逻辑。我的代码到目前为止显示保存文本文件中的所有单词并将它们存储到数组中。我现在想要将数组中的单词与不同的文本文件进行比较。但我不确定如何循环这一切。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream infile("words.txt");
int i = 0;
string array[9];
while (!infile.eof())
{
for (int j = 0; i < 10; i++)
{
infile >> array[i];
if (!infile.eof())
{
cout << array[i] << endl;
}
}
}
答案 0 :(得分:1)
你有两个问题(至少)!
首先,你不应该在!infile.eof()
循环,这很少会按预期工作。原因是在{em>之后 > 之后
第二个问题是你有一个包含九个字符串的数组,但你读了十个字符串,当你写出数组的边界时会导致undefined behavior。
第一个问题可以通过记住所有输入操作返回实际流对象来解决,并且流对象本身可以用作布尔值来查看是否一切正常。第二个问题可以通过使用std::vector
代替,或者通过只读取9个单词或通过将数组的大小增加到10来解决。
或者你可以使用eofbit
并使用std::istream_iterator
通过一次初始化将文件中的所有“单词”(空格分隔的字符串)读入向量:
std::vector
在上述声明之后,向量std::vector<std::string> words(
std::istream_iterator<std::string>(infile),
std::istream_iterator<std::string>());
将包含文件中所有以空格分隔的“单词”。
要解决与另一个文件进行比较的问题,请创建如上所示的两个向量,并将第一个向量中的每个单词与第二个向量中的相应单词进行比较。但要小心检查你是否超出任何向量范围。
答案 1 :(得分:0)
您可以使用一个集合,而不是使用数组。您可以从一个文件中输入所有单词,然后只检查另一个文件的每个单词(如果包含)。如果你想让它快速工作,你可以考虑使用一个hashset(在C ++中这将是std :: unordered_set)。您可以检查平均时间复杂度为O(1)的项目是否存在。