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

#include <stdio.h> void pack_string(char s[]){ int sum=0,num=0,i=1,save=s[0]; while(s[i]!='.'){ if(s[i]==save){ sum++; num=s[i]; }else { printf("%d%c",sum,num); sum=1; num=s[i]; } } } int main() { char a[1000]; for(int i=0;i<1000;i++){ scanf("%s",&a[i]); } pack_string(a[]); return 0; }
这段代码试图实现一个字符串压缩功能,但存在多个问题。代码的意图是遍历字符串,统计连续相同字符的个数,然后输出“个数+字符”的格式,直到遇到句点结束。

代码的主要问题:

- 在 `pack_string` 函数中,`sum` 和 `num` 的初始值设置不正确。`sum` 应该从1开始计数(因为第一个字符已经出现一次),而 `num` 应该初始化为第一个字符 `save`。当前代码中 `sum` 从0开始,且 `num` 初始为0,会导致第一个字符的计数和输出错误。

- 循环条件 `while(s[i]!='.')` 是正确的,但循环内部缺少对字符串结束符 `\0` 的判断,如果字符串中没有句点,可能会越界访问。

- 在 `main` 函数中,`scanf("%s",&a[i])` 用法错误。`%s` 用于读取一个字符串,而不是单个字符。这里应该用 `%c` 读取单个字符,或者直接用 `scanf("%s", a)` 读取整个字符串。

- 调用 `pack_string(a[])` 语法错误,应该写成 `pack_string(a)`。

- 循环读取1000个字符的方式不合理,应该先读取一个字符串,然后传递给函数处理。

- 函数结束后没有输出最后一个字符组的计数,因为循环在遇到句点时退出,但最后一个字符组(句点之前的部分)没有被打印。