在线编译器 C

#include <stdio.h> int main() { char a[1001]; scanf("%[^\n]", a); long long int p = 0, count = 1; while(a[p] != '\0' ) { p++; } printf("%lld\n", p); //char prev_a = a[0]; for(int i = 1; i < p; i++) { if(a[i] != a[i-1]) { printf("%c", a[i-1]); if (count != 1 ) { printf("%lld", count); count = 1; } } else { count++; } } return 0; }
这段代码试图实现一个简单的游程编码(Run-Length Encoding),但存在逻辑问题。它先读取一行字符串并计算长度,然后遍历字符串,当相邻字符不同时输出前一个字符及其出现次数。

代码的主要问题在于:
- 循环结束后,最后一个字符及其计数没有被输出
- 当字符相同时,count递增但未输出任何内容,导致最后一个字符组被遗漏

- 检查循环结束后,如何处理最后一组连续相同的字符。当前代码在循环结束后直接返回,没有输出最后一组。
- 注意count的初始值是1,但第一个字符的处理方式。当第一个字符与第二个不同时,代码会输出第一个字符,但此时count可能未被正确使用。