在两个文本文件中搜索单词c ++

时间:2014-05-21 03:27:37

标签: c++ search compare

我是新来的。无论如何。我试图从包含少量关键字的文本文件中搜索文本文件(包含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;
}

我希望有人可以帮忙解决这个问题。在这里呆了几个星期:(

1 个答案:

答案 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';