c语言中的RLE算法
首先,英语不是我的主要语言。我是C新手,我的任务之一是在特定情况下执行RLE算法,这种情况只考虑以下条件:c语言中的RLE算法,c,algorithm,run-length-encoding,C,Algorithm,Run Length Encoding,首先,英语不是我的主要语言。我是C新手,我的任务之一是在特定情况下执行RLE算法,这种情况只考虑以下条件: 'aaabb' 'bbbrr' 'ggskkkk'等等。。。 在这种情况下:“aaaaaa yyy”, 我已经完成了以下代码: void StringRLE(char *pointer) { char rle[strlen(pointer)]; int i=0; int rleCount =1; char *s = pointer+1,ch; wh
'aaabb'
'bbbrr'
'ggskkkk'
等等。。。
在这种情况下:“aaaaaa yyy”
,
我已经完成了以下代码:
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字符串。为什么,我该如何解决它?下面的代码对我很有用。进行了一些更改以使其编译并运行
void StringRLE(char *pointer)
{
char *rle = new char[strlen(pointer)];
int i=0;
int rleCount = 1;
char *s = pointer+1, ch[2] = {0,0};
while(*pointer!= '\0')
{
if(*pointer==*s)
rleCount++;
else
{
itoa(rleCount, rle, 10);
ch[0] = *pointer;
strcat(rle, ch);
puts(rle);
rleCount = 1;
}
pointer++;
s++;
i++;
}
}
第一:
charrle[strlen(指针)]代码>应该是charrle[strlen(指针)+1]代码>不要忘记,在最坏的情况下,RLE字符串的长度可能是源字符串的两倍。因此,charrle[strlen(指针)*2+1]代码>顺便说一句,这段代码不是为我编译的。许多编译错误-1。当您声明rle时,您不能使用strlen。它应该是一个常量值,2。Atch=*指针[i]
应该是*(指针+i)和3。Atstrcat(rle,ch)
应为strcat(rle,ch)
。你能重新获得这个密码吗。你在用什么编译器。