C++ 输入终端问题和映射

C++ 输入终端问题和映射,c++,C++,我在用地图计算单词的出现次数。这是代码 #include <iostream> #include <map> #include <string> using namespace std; int main() { map<string,int>wordcount; string s; while (cin>> s && s!="red") ++wordcount[s];

我在用地图计算单词的出现次数。这是代码

#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;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
mapwordcount;
字符串s;
而(cin>>s&&s!=“红色”)
++字数;;
而(cin>>s&&s!=“红色”)

cout没有问题。当您“未调试运行”时,Visual Studio将在程序结束前自动启动该程序,以防止控制台窗口关闭。

太模糊,无法在此处编写,但我将再试一次。:)

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

尝试使用以下输入运行程序:

one
two
two
red
zero
one
two
red

我知道您希望收到单词列表,将每个单词出现的次数填入地图,然后打印出来

因此,与第二个while循环不同,您需要在创建的映射上迭代,并打印每个单词的计数


您可以学习如何打印映射的内容。

为什么要使用完全相同的循环测试两次?这意味着第二个循环不可能运行。@Marcelo:s在s!=“红色”之前获得一个新值是计算的,所以第二个循环确实运行。@Mattias:你明白了!那么,我可以建议,这是一种相当模糊的逻辑编写方式吗?这是由预先确定的输入格式强加给你的吗?你真的想让输入文件决定打印哪些键(以及以何种顺序打印),或者这只是一种不必要的迂回方式来打印所有的密钥?@Marcelo:我必须同意你的观点。这不是我的代码,我会以不同的方式解决这个问题。也许我要做的第一件事就是抱怨“红色”有一个特殊的含义:)流可以转换为布尔。