0

まず、英語は私の第一言語ではありません。私はCが初めてで、私のタスクの1つは、特定のケースで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++;
    }                                                                         
}

しかし、2 回目itoaに my を文字列に変換するために使用して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 に答える