0

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

4

1 回答 1

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++;
    }                                                                         
}
于 2013-09-20T13:59:44.357 回答