地图给出了一些模棱两可的价值

时间:2018-05-19 11:02:39

标签: c++ dictionary stl containers

预期的输出是" 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;

2 个答案:

答案 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