【发布时间】:2013-09-20 12:19:16
【问题描述】:
首先,英语不是我的主要语言。我是 C 新手,我的任务之一是在特定情况下执行 RLE 算法,它只依赖于以下条件:
'aaabb'
'bbbrr'
'ggskkkk' 等等...
在这种情况下:'aaaaaayyy',
我已经完成了这段代码:
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 转换为字符串时,当它完成对'y'的计数时,itoa 会覆盖RLE 字符串。为什么,我该如何解决?
【问题讨论】:
-
第一:
char rle[strlen(pointer)];应该是char rle[strlen(pointer) + 1]; -
不要忘记,在最坏的情况下,RLE 字符串的长度可能是源字符串的两倍。因此,
char rle[strlen(pointer)*2 + 1]; -
顺便说一句,这段代码不能为我编译。很多编译错误—— 1.声明rle时,不能使用strlen。它应该是一个常数值,2.
ch = *pointer[i]应该是 *(pointer + i) 和 3.strcat(rle, ch)应该是strcat(rle, &ch)。您甚至可以重新使用此代码。你用的是什么编译器。
标签: c algorithm run-length-encoding