2010-07-18 79 views
2

我使用地图来计算单词的出现次数。这是代码。输入终端问题和地图

#include <iostream> 
#include <map> 
#include <string> 
using namespace std; 
int main() { 
    map<string,int>wordcount; 
    string s; 

    while (cin>> s && s!="red") 
     ++wordcount[s]; 

    while (cin>>s && s!="red") 

    cout << s << " " << wordcount[s] << endl; 
    return 0; 
} 

我开始程序,键入单词并在最后一行输入单词“红色”,但它什么也没做。然后我键入“红色”第二次,它输出:

按任意键继续

有什么不好?

+0

为什么你使用两次完全相同的循环测试?这意味着第二个循环不可能运行。 – 2010-07-18 09:51:21

+0

@Marcelo:在评估s!=“red”之前,“s”会得到一个新值,因此第二个循环会运行。 – 2010-07-18 10:04:38

+0

@Mattias:你让我在那里!那么,我可以建议,这是一个相当模糊的写逻辑的方式吗?这是否被预定的输入格式强加于你?你真的想要输入文件决定哪些键打印出来(以及以何种顺序),或者这只是一种不必要的全方位打印所有键的方式? – 2010-07-18 10:12:12

回答

0

太写了,但我会再试一次。 :)

如果你写了很多单词,它会数它们直到你写“红”。 第二个循环将打印您输入的单词的计数,但是如果您立即放入“红色”,它将简单地终止程序而不打印任何内容。

尝试用下面的输入运行程序:

one 
two 
two 
red 
zero 
one 
two 
red 
+0

流可以转换为布尔值。 – kennytm 2010-07-18 09:58:11

+0

你是肯尼。更新中... – 2010-07-18 09:59:32

1

没有错。当您“无需调试运行”时,Visual Studio会在程序结束前自动将PAUSE程序关闭,以防止关闭控制台窗口。

1

我知道你想接收的单词列表,填补出现的每个单词的数量成地图,并打印出来。

因此,您需要在您创建的地图上迭代,而不是第二个while循环,并打印每个单词的计数。

您可以了解here如何打印地图的内容。