1

这是我到目前为止的代码

int main()
{
string word;
int wordcount = 0;
cout << "Enter a word to be counted in a file: ";
cin >> word;
string s;
ifstream file ("Names.txt");
while (file >> s)
        {
            if(s == word)
            ++ wordcount;
        }
int cnt = count( istream_iterator<string>(file), istream_iterator<string>(), word());
cout << cnt << endl;
}

File Names.txt 有大量的单词和数字。我不太明白 istream 迭代器如何计算单词,但我得到了一些结果。我目前得到的唯一错误是

in function int main 
error: no match for call to `(std::string) ()'

这发生在以“int cnt”开头的行中。我已经尝试了几个小时,但我对 C++ 不太熟悉,看来我必须创建一个额外的字符串或以某种方式更改单词字符串。

我将不胜感激任何帮助!

4

3 回答 3

1

此行不正确:

 int cnt = count( istream_iterator<string>(infile), 
            istream_iterator<string>(), word());
                                          //^^^^^Error

应该:

int cnt = count( istream_iterator<string>(infile), 
                istream_iterator<string>(), word);

同时,删除以下部分:

while (infile >> s)
{
    if(s == word)
    ++ wordcount;
}

否则,file当您使用带有计数算法的迭代器时,将指向文件末尾。您应该使用循环或迭代器,而不是同时使用两者。

于 2013-04-07T14:48:28.860 回答
0

问题是:word()。您试图在 std::string 上调用 operator(),但 std::string 中没有这样的成员函数。

将您的声明更改为:

int cnt = count(istream_iterator<string>(file), istream_iterator<string>(), word);
于 2013-04-07T14:51:21.180 回答
0

由于 tacp 要求您删除的 while 循环,您得到的输出为 0。while 循环将文件指针推进到文件末尾,因此计数算法在文件末尾开始和结束,实际上什么都不做。

于 2013-04-07T15:00:02.137 回答