Во-первых, английский не является моим основным языком. Я новичок в C, и одна из моих задач делает алгоритм RLE в конкретном случае, который это рассчитывать лишь на условиях, подобных тем: 'aaabb'
'bbbrr'
'ggskkkk'
и т.д ... На этот случай: 'aaaaaayyy'
, I» ве сделали этот код:RLE-алгоритм в c
void StringRLE(char *pointer)
{
char rle[strlen(pointer)];
int i=0;
int rleCount =1;
char *s = pointer+1,ch;
while(*pointer!= '\0')
{
if(*pointer==*s)
rleCount++;
else
{
itoa(rleCount, rle, 10);
ch = *pointer[i];
strcat(rle, ch);
puts(rle);
rleCount = 1;
}
pointer++;
s++;
i++;
}
}
Но когда я использую itoa
конвертировать мой int
в строку во второй раз, когда это делается подсчет «у» itoa
переопределения РЛЭ строки. Почему и как я могу это решить?
Первое: 'символ RLE [STRLEN (указатель)];' 'должен быть символ RLE [StrLen (указатель) + 1];' –
Не стоит забывать, что в худшем случае, строка RLE может иметь в два раза больше длины строки источника. Поэтому 'char rle [strlen (pointer) * 2 + 1];' – Medinoc
Кстати, этот код не компилируется для меня. Многие ошибки компиляции - 1. Когда вы объявляете rle, вы не можете использовать strlen. Он должен быть постоянным значением. 2. В 'ch = * pointer [i]' должно быть * (указатель + i) и 3. В 'strcat (rle, ch)' должно быть 'strcat (rle, & ch)'. Вы даже можете повторно использовать этот код. Какой компилятор вы используете. –