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

#include <stdio.h> void pack_string(char s[]){ int sum=1,num=s[0],i=1; while(s[i]!='\0'){ if(s[i]==num){ sum++; num=s[i]; }else { sum=1; num=s[i]; }i++; } } int main() { char a[]="abc."; //printf("%c%d",num,sum); pack_string(a); return 0; }
这段代码试图实现一个字符串压缩功能,但当前版本只遍历了字符串,没有输出任何结果。

代码逻辑是:遍历字符串,统计连续相同字符的个数,当遇到不同字符时重置计数器。但存在几个问题:

- 变量 `num` 被定义为 `int` 类型,但用来存储字符,应该用 `char` 类型。
- 循环中每次遇到相同字符时,`num=s[i]` 是多余的,因为 `num` 已经等于 `s[i]`。
- 函数没有输出或返回任何压缩结果,所以运行后看不到效果。

- 思考一下:压缩字符串通常需要输出字符及其连续出现的次数,比如 "aaab" 变成 "a3b1"。你的代码目前只统计了次数,但没有输出。
- 检查变量 `num` 的类型:字符应该用 `char` 存储,而不是 `int`。虽然 `int` 也能存字符的ASCII码,但逻辑上不清晰。