使用map来计算字符串输入

时间:2016-12-29 14:39:34

标签: c++ stl

如果用户在输出结果为" OK"否则输出将是字符串和它旁边的字符串的重复时间的数量

我知道代码看起来非常愚蠢,这是我第一次使用地图而且我不熟悉语法

任何帮助将不胜感激

int main()
{
    int t, i = 0;
    string s;
    map<string, int> m;
    cin >> t;
    while (t--) {
        cin >> s;
        m[s] = i++;
        if (i == 0)
            cout << "OK";
        else
            cout << m[s] << m.second << endl;
    }
}

1 个答案:

答案 0 :(得分:3)

    cin >> s;
    m[s]++;
    if (m[s] == 1)
        cout << "OK\n";
    else
        cout << "this is the " << m[s] << "th occurence of " << s << "\n";

请注意,即使地图中尚未显示m[s],您也可以使用s,因为运营商[]会自动添加它并将其第二个初始化为零。

编辑:为了避免在地图中搜索两次(见@Slava的评论),我们可以用这种方式做得更好(更快):

    cin >> s;
    i = ++m[s];
    if (i == 1)
        cout << "OK\n";
    else
        cout << "this is the " << i << "th occurence of " << s << "\n";