我试图在单独的文件中获取每个单词的文件中的出现次数。以下代码应使用 fl 中的单词生成 sl 中每个单词的出现次数,但相反,它会为每个单词输出 0 什么时候有很多例子。我试图弄清楚问题是什么,可以通过一些帮助来解决。 getNextWord()函数只返回文件中的下一个单词。
while(fl.isWord()){
int total = 0;
string temp1= fl.getNextWord();
while(sl.isWord()){
string temp2 = sl.getNextWord();
if(temp1.compare(temp2)!=0) total ++;
//if(temp1 == temp2) total++;
}
cout << temp1 << " " << total << endl;
}
函数isWords()在一个单独的类中:
bool ReadWords::isWord(){
if(file.good())
return !eoffound;
else
return eoffound;
范例列表:
fl content kfc cows
sl内容:该死的奶牛鸡苹果苹果kfc食物肥牛
输出
kfc 0
奶牛0
输出应为:
kfc 1
奶牛3编辑部分:
string ReadWords::getNextWord(){
file >> theWord;
return theWord;
}
答案 0 :(得分:1)
假设您解析文件的函数是正确的,那么实现的逻辑就会出现问题。问题是,在你从fl得到第一个单词后,你搜索整个文件sl,这个到达它的eof,然后搜索将无法工作,因为sl是在eof。
在你完成佛罗里达州的每一个单词后,你需要的是seek
sl开头的方法。
while(fl.isWord()){
/* seek sl to beginning; then do the rest */
int total = 0;
string temp1= fl.getNextWord();
while(sl.isWord()){
string temp2 = sl.getNextWord();
if(temp1 == temp2) total++;
}
cout << temp1 << " " << total << endl;
}
编辑:如果你找不到寻找文件的方法,可以使用vector<string>
在一次传递中将所有单词加载到内存中,然后在此向量上搜索fl中的每个单词。
这将更正您的实施的逻辑。但是,这并不是说它是推荐的&#34;最好的&#34;实施(以避免纯粹主义者对我大喊:P)。