【发布时间】:2018-05-19 11:02:38
【问题描述】:
预期的输出是“2a3b3c4d3l4z”但是 我得到:12a3b3c4d3l4z。
为什么输出中有额外的“1”?
char ipstr[] = "aabbbcccddddzzzzlll";
cout<<"size of string:"<<sizeof(ipstr)<<endl;
num = 0;
map<char, int> ms;
for(int i = 0; i<sizeof(ipstr);i++){
if(ipstr[i] == ipstr[i+1])
num++;
else{
ms[ipstr[i]] = num+1;
num = 0;
}
}
for(auto it = ms.begin();it != ms.end();it++){
cout<<it->second<<it->first;
}
cout<<endl;
【问题讨论】:
-
1) 您是否尝试过使用调试器单步执行您的代码? 2)
ipstr[i+1]是由于越界访问而导致的未定义行为。 3) 你知道,字符串文字以\0字符结尾吗? -
首先 sizeof 不是获取字符串大小的最佳方法。此外,在 for 循环中,您会越界。将条件替换为 i
-
让它变得简单。尝试 1 个字符。
-
@AlgirdasPreidžius 是的,是正确的。终止的 char 值在这里打印为 1.strlen 是否可以正常工作?有什么办法摆脱它?
-
@KirillKorolev 是的,将更改为 strlen(),谢谢。
标签: c++ dictionary stl containers