映射stl值的条件递增?

时间:2015-02-07 16:00:42

标签: c++ dictionary stl

这可能是stl中一个非常基本的概念,但我是c ++的新手,所以需要一些帮助。 http://www.spoj.com/problems/NY10A/是我正在处理的问题。我想过使用map stl来检查所需的字符串。这是我的代码 -

#include<bits/stdc++.h>
using namespace std;
map<string, int> create()
{
    map<string, int> m;
    m["TTT"] = m["TTH"] = m["THT"] = m["THH"] = m["HTT"] = m["HTH"] = m["HHT"] = m["HHH"] = 0;
    return m;
}
int main()
{
    freopen("in.txt", "r", stdin);
    int t;cin>>t;int i = 1;int j;
    while(i <= t)
    {
        char p[41];
        cin>>j;
        for(int k = 0; k < 40; ++k)
            cin>>p[k];
        char des[3];
        map<string, int> cnt = create();
        for(int k = 2; k < 40; ++k)
        {
            strncpy(des, p + (k - 2), 3);
            /*if(!strcmp(des, "HHH"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "HHT"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "HTH"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "HTT"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "THH"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "THT"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "TTH"))
                cnt[des] = cnt[des] + 1;
            else if(!strcmp(des, "TTT"))
                cnt[des] = cnt[des] + 1;*/
            cnt[des] = cnt[des] + 1;
        }
        cout<<i<<" "<<cnt["TTT"]<<" "<<cnt["TTH"]<<" "<<cnt["THT"]<<" "<<cnt["THH"]<<" "<<cnt["HTT"]<<" "<<cnt["HTH"]<<" "<<cnt["HHT"]<<" "<<cnt["HHH"]<<"\n";
        ++i;
    }
    return 0;
}

目前我在问题陈述中提供的测试用例的o / p是 -

1 0 0 0 0 0 0 0 0 
2 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0

我觉得很难理解为什么部分cnt [des] = cnt [des] + 1;根本不工作。但是当我取消注释for循环中注释的if else部分时,这就是我得到的o / p -

1 0 0 0 0 0 0 0 76
2 76 0 0 0 0 0 0 0
3 8 14 12 8 14 8 10 2
4 12 6 8 10 6 12 10 12

虽然很明显。 请解释一下背后的原因,告诉我在地图STL的使用方面我做错了。

0 个答案:

没有答案