在C中打印正确数量的相同字符.RLE时出现问题

在C中打印正确数量的相同字符.RLE时出现问题,c,run-length-encoding,C,Run Length Encoding,在RLE程序中,我很难打印出正确的字符数。我已经将其用于阵列,我正在寻找一种不同的方法。以下是代码: #include <stdio.h> int main () { char elem,elem1; int n=1; while ((elem=getchar())!=EOF && elem!='\n'){ if ((elem1=getchar())==elem){ n++; }

在RLE程序中,我很难打印出正确的字符数。我已经将其用于阵列,我正在寻找一种不同的方法。以下是代码:

 #include <stdio.h>

int main ()
{
    char elem,elem1;
    int n=1;
    while ((elem=getchar())!=EOF && elem!='\n'){
        if ((elem1=getchar())==elem){
            n++;
        }
        printf("%d%c",n,elem);
        n=1;
    }
    printf("\n");
    return 0;
}
#包括
int main()
{
charelem,elem1;
int n=1;
而((elem=getchar())!=EOF&&elem!='\n'){
if((elem1=getchar())==elem){
n++;
}
printf(“%d%c”,n,elem);
n=1;
}
printf(“\n”);
返回0;
}

例如,输入-->ttyyy时,输出为2t2y1y。已尝试添加else语句,但它从未实际进入该语句。输出应为2t3y


提前谢谢。

试试这个:

基本上,我们计算所有的字符,只要它和以前一样。当字符更改时,我们将字符与旧计数器一起打印,并将计数器设置回1

  • old_elem
    保存最后一个字符
  • elem
    保存当前字符
(我们将old_elem设置为某个初始值,以便检查它是否是遇到的第一个字符)

#包括
int main(){
字符元素;
char old_elem='$';
int n=1;
而((elem=getchar())!=EOF&&elem!='\n'){
如果(elem==old_elem){
n++;
}
否则{
if(old_elem!='$'){printf(“%d%c”,n,elem);}
n=1;
}
旧元素=元素;
}
printf(“%d%c\n”,n,旧元素);
返回0;
}
输入示例:

ttyyy

输出:

2t3y


为什么在一次循环迭代中调用getchar()两次(一次在while条件下,一次在if条件下)?输出应该是什么?输出应该是2t3y。我调用getchar两次是因为我正在读取下一个字符,我没有找到其他方法。我想你的程序永远不会显示大于2的计数。你能证实吗?例如,用
tttttt
测试这是正确的,只需进行一个小的编辑,在if语句中,它应该是printf(“%d%c”,n,old_elem)。谢谢你,na sai kala@阿莱克斯01011哈哈。。。卡尔梅拉!:)
#include <stdio.h>

int main () {
    char elem;
    char old_elem = '$';
    int n=1;
    while ((elem=getchar())!=EOF && elem!='\n'){
        if (elem==old_elem) { 
            n++; 
        }
        else { 
            if ( old_elem!='$') { printf("%d%c",n,elem); } 
            n=1; 
        }
        old_elem = elem;
    }
    printf("%d%c\n",n,old_elem);

    return 0;
}