这可能是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的使用方面我做错了。