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

首先,英语不是我的主要语言。我是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;
    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。At
ch=*指针[i]
应该是*(指针+i)和3。At
strcat(rle,ch)
应为
strcat(rle,ch)
。你能重新获得这个密码吗。你在用什么编译器。