gpt4 book ai didi

c++ - 比较字符串 (C++)

转载 作者:行者123 更新时间:2023-11-30 05:36:23 27 4
gpt4 key购买 nike

我正在尝试获取文件中每个单词在单独文件中出现的次数。以下代码应使用 fl 中的单词生成 sl 中每个单词的出现次数,但相反,它为每个单词输出 0 even当有很多实例时。我正在尝试找出问题所在,并且可以寻求帮助。 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内容肯德基奶牛

sl content:该死的牛牛鸡苹果苹果肯德基食品肥牛

输出:

肯德基 0

奶牛 0

输出应该是:

肯德基 1

奶牛 3

编辑部分:

string ReadWords::getNextWord(){
file >> theWord;
return theWord;
}

最佳答案

假设你的解析文件的函数是正确的,但是实现的逻辑有问题。问题是当你从 fl 中得到第一个单词后,你搜索整个文件 sl,这个到达它的 eof,然后后面的搜索将不起作用,因为 sl 在 eof。

您需要的是一种方法 seek完成 fl 中的每个单词后 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> 将其所有单词加载到内存中,一次通过,然后在这个 vector 上搜索 fl 中的每个单词。

这将纠正您实现的逻辑。但是,这并不是说它是推荐的和“最佳”实现(以避免纯粹主义者对我大喊大叫 :P)。

关于c++ - 比较字符串 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33586621/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com