Как изменить этот код сжатия строки C для обработки более 9 повторений символа? - PullRequest
0 голосов
/ 06 марта 2012

Если этому коду сжатия строки присвоена строка aaaabbbbcc, будет получена строка a4b4c2.Однако решение не работает, если число вхождений символа больше 9. Какие изменения должны быть внесены?

void convert(char *s) {
    char *p = s;  
    char *q = s;  
    int c;
    int counter;
    while (*p) {
        c = *p;
        counter = 0;
        while (*p && *p == c) {
            p++;
            counter++;
        }
        *q++ = c; 
        *q++ = counter+'0'; 
    }
    *q = 0;
}

Проблема заключается в том, что для числа, большего 9, нет значения ASCII.Итак, как сохранить это число в строке?

Ответы [ 3 ]

0 голосов
/ 06 марта 2012

После 9 я бы просто пошел с буквами:

A = 10
B = 11
...
Z = 36.
0 голосов
/ 06 марта 2012

, поскольку эти шаблоны обычно не встречаются в удобочитаемой для человека форме, я заключу, что они должны быть машиночитаемыми, поскольку 99,9% слов будут иметь отрицательное сжатие, даже если они имеют повторяющиеся символы

ех. вакуум -> v1a1c2u2m1

вам не нужно использовать int для счетчика, вы можете просто использовать:

char c, counter=-128;

тогда вы можете просто изменить

counter=0;
//to
counter=-128;

*q++ = counter+'0';
//to
*q++ = counter;

если вам нужен читабельный вывод, используйте что-то вроде:

printf("%c,%d:",string[pos],(string[pos+1]+128));
0 голосов
/ 06 марта 2012

Измените строку 14 на:

*q++ = itoa(counter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...