比较字符串(C++)
Comparing Strings (C++)
我正在尝试获取一个单独文件中每个单词在一个文件中的出现次数。下面的代码应该使用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含量kfc奶牛
sl内容:该死的奶牛鸡苹果苹果肯德基食品肥牛
输出:
kfc 0
奶牛0
输出应为:
kfc 1
奶牛3
编辑部分:
string ReadWords::getNextWord(){
file >> theWord;
return theWord;
}
假设解析文件的函数是正确的,那么实现的逻辑就会出现问题。问题是,在你从fl中得到第一个单词后,你搜索整个文件sl,这个文件达到了它的eof,然后以后的搜索将不起作用,因为sl处于eof。
你需要的是一种方法,在你完成fl中的每个单词后,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.中的每个单词
这将更正实现的逻辑。然而,这并不是说它是推荐的和"最好的"实现(以避免纯粹主义者对我大喊大叫:P)。