Онлайн компилятор C

#include <stdio.h> void pack_string(char s[]) { int time = 0; for (int i = 0; s[i] != '.'; i++) { time++; } int A[time], m = 0; for(int i = 0; i< time; i++) { A[i] = 0; } char B[time]; for (int i = 1; s[i] != '.'; i++) { if(s[i-1] == s[i]) { A[m]++; } else { B[m]= s[i-1]; m++; } } for(int i =0 ; i < m; i++) { printf("%d%d", B[i], A[i]); } } int main() { return 0; }
这段代码试图实现一个字符串压缩功能,但存在几个关键问题。

代码的思路是:遍历字符串直到遇到句点,统计每个连续相同字符的出现次数,然后输出字符和对应的次数。但实现中有多处错误。

- 数组 `A` 用于存储每个字符的计数,但 `A[m]++` 在第一次遇到新字符时没有先设置初始值1,而是从0开始递增,导致计数少1。
- 循环条件 `s[i] != '.'` 假设字符串以句点结尾,但 `main` 函数中没有定义任何字符串,也没有调用 `pack_string`,所以代码实际上不会执行任何压缩操作。
- 输出时 `printf("%d%d", B[i], A[i])` 将字符 `B[i]` 以整数格式输出,会打印其ASCII码而不是字符本身。