在文本c ++中选择单词的出现

时间:2017-05-01 00:17:57

标签: c++

我正在从事语言学研究,我需要一些帮助。

我在文本文件中有一个名字列表(names.txt) 我需要找出这个文件中所有单词出现在另一个文本文件(data.txt)中的次数。

到目前为止,我通过手工编写一个字符串中的names.txt文件中的每个单词找到了一种手动方式。有没有更短的方法来解决这个问题?

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
   ifstream file("names.txt");
   ifstream file("data.txt")

int wcount = 0;

string token;

string word("Jhon");   //here I write names which are supposed to be taken
string word1("James"); //from names.txt automatically
string word2("Rick");
string word3("Morty");
string word4("Alice");
string word5("Tina");
string word6("Timmy");
// ...         

while (file>>token) //here I check if those words exist in data.txt
    if ((word == token) || (word1== token)|| (word2 == token) || (word3== token)|| (word4 == token) || (word5== token) || (word6==token))

    wcount++;

cout << wcount << endl;



    return 0;

1 个答案:

答案 0 :(得分:0)

使用std::vector<std::string>保存字典,std::find查找字词。有些人可能认为std::set的查找算法比std::vector更快,但在此算法优于从std::vector连续获得的增益之前,您需要非常多的元素存储器中。

#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>

int main()
{
  std::ifstream names("names.txt");
  std::ifstream data("data.txt");

  std::vector<std::string> words = { "Jhon", "James", "Rick", "Morty", "Alice", "Tina", "Timmy" };

  int wcount = 0;
  std::string token;
  while (data >> token) //here I check if those words exist in data.txt
    if (std::find(std::begin(words), std::end(words), token) != std::end(words))
      ++wcount;

  std::cout << wcount << '\n';
}