карта, дающая некоторую двусмысленную ценность - PullRequest
0 голосов
/ 19 мая 2018

Ожидаемый результат - «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 голосов
/ 19 мая 2018

Дополнительная 1 - это распечатка записи {'\0', 1}, вызванной введением конечного '\0' в цикл.\0 не печатается, поэтому вы видите только 1.

0 голосов
/ 19 мая 2018

Вы оценили длину строки, включая символ '\ 0' (может быть неоднозначно, что строка заканчивается этим).Затем в цикле вы добавили '\ 0' на карту.Но что значит печатать нулевой символ.Вот почему у вас есть 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...