RLE算法C.

时间:2014-03-16 09:13:58

标签: c algorithm compression

这是C上的RLE算法,但它不起作用!

![] [1]

问题在哪里? 原始和编码的字符串不显示 请帮帮我 为什么结果不显示? 我需要尽快完成它,所以我希望你可以帮助它让它发挥作用。 谢谢你的关注

#include "stdafx.h"
#include< stdio.h>
#include< conio.h>
#include <stdlib.h>
#include< string.h>
void main()
{
    int i, j, cnt, l, count[50] = { 0 };
    char str[50];
    system("cls");
    printf("Enter the string: ");
    scanf_s("%s", str);
    printf("\n\tOriginal String is: %s", str);
    printf("\n\n\tEncoded String is: ");
    l = strlen(str);
    for (i = 0; i< l; i *= 1)
    {
        j = 0;
        count[i] = 1;
        do
        {
            j++;
            if (str[i + j] == str[i])
                count[i]++;
        } while (str[i + j] == str[i]);
        if (count[i] == 1)
            printf("%c", str[i++]);
        else
        {
            printf("%d%c", count[i], str[i]);
            i += count[i];
        }
    }
    _getch();
}

2 个答案:

答案 0 :(得分:1)

最大的问题:你有

for (i = 0; i< l; i *= 1)
//                  ^ multiplication

任何乘以1的内容都不会改变价值;这是一个无限循环

答案 1 :(得分:0)

唯一的问题可能是尝试访问数组元素超出范围:

参见,假设i = 45,最初j将为1      如果直到索引49的所有字符都与索引45相同,则j将为5,您将访问str [i + j],即str [45 + 5] = str [50],这是未定义的,因为您的数组限制为50。 所以我认为你也应该检查索引是否在界限内。

    do
    {
        j++;
        if ((i+j)<50 && (str[i + j] == str[i]))
            count[i]++;
    } while ((i+j)<50 && (str[i + j] == str[i]));