2017-05-01 12 views
0

私は言語学の研究をしており、助けが必要です。テキスト中の選択された単語の出現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; 
+0

あなたの質問がありますか?コードを書く必要がありますか? –

+1

word1 ... nをstd :: vectorに置き換えてください。 – OldProgrammer

+1

"std :: set "に "names.txt"のすべての単語を格納してください。 "data.txt"の単語を解析するループで、単語が存在するかどうかを確認するために 'std :: set :: find(token)'を呼び出します。 – zett42

答えて

0

の単語を検索する辞書とstd::findを保持するためにstd::vector<std::string>を使用してください。 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'; 
} 
関連する問題