预期的输出是" 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;
答案 0 :(得分:2)
您评估了字符串长度,包括&#39; \ 0&#39;字符(字符串以此结尾可能是暧昧的)。然后在for循环中添加了&#39; \ 0&#39;到地图。但是打印空字符意味着什么。这就是为什么你在开头就有1和一个空格的原因。
char ipstr[] = "aabbbcccddddzzzzlll";
int n = strlen(ipstr);
cout << "size of string:" << n << endl;
int num = 0;
map<char, int> ms;
for (int i = 0; i < n - 1; 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)
额外1
是条目{'\0', 1}
的打印输出,它将尾随'\0'
带入循环。 \0
不可打印,因此您只能看到1
。