【问题标题】:RLE algorithm in cc语言中的RLE算法
【发布时间】:2013-09-20 12:19:16
【问题描述】:

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

【问题讨论】:

  • 第一:char rle[strlen(pointer)]; 应该是char rle[strlen(pointer) + 1];
  • 不要忘记,在最坏的情况下,RLE 字符串的长度可能是源字符串的两倍。因此,char rle[strlen(pointer)*2 + 1];
  • 顺便说一句,这段代码不能为我编译。很多编译错误—— 1.声明rle时,不能使用strlen。它应该是一个常数值,2.ch = *pointer[i] 应该是 *(pointer + i) 和 3.strcat(rle, ch) 应该是strcat(rle, &ch)。您甚至可以重新使用此代码。你用的是什么编译器。

标签: c algorithm run-length-encoding


【解决方案1】:

下面的代码对我有用。进行了一些更改以使其编译和运行。

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

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2012-04-22
    • 2021-03-17
    • 1970-01-01
    • 2015-07-20
    • 2011-10-12
    • 2023-04-09
    • 2012-07-19
    相关资源
    最近更新 更多