这是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();
}
答案 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]));