比较字符串(C++)

Comparing Strings (C++)

本文关键字:C++ 字符串 比较      更新时间:2023-10-16

我正在尝试获取一个单独文件中每个单词在一个文件中的出现次数。下面的代码应该使用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中的每个单词后,seeksl一直到它的开头。

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)。