比较字符串(C ++)

时间:2015-11-07 19:03:10

标签: c++ ifstream istream

我试图在单独的文件中获取每个单词的文件中的出现次数。以下代码应使用 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;
}

1 个答案:

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