c中的RLE算法

时间:2013-09-20 12:19:17

标签: c algorithm run-length-encoding

首先,英语不是我的主要语言。我是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字符串。为什么,我怎么解决它?

1 个答案:

答案 0 :(得分:0)

以下代码适合我。做了一些改动,使其编译和运行。

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++;
    }                                                                         
}