我正在从事语言学研究,我需要一些帮助。
我在文本文件中有一个名字列表(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;
答案 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';
}