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

#include <stdio.h> #include <string.h> void pack_string(char s[]) { char current = *s; int counter = 0; while (*s != '\0') { if (*s == current) { counter++; } else { printf("%c%d", current, counter); counter = 1; } current = *s; s++; } } int main() { char a[] = "zzzzzzzzzzz."; pack_string(a); return 0; }
这段代码试图实现一个字符串的“游程编码”功能:将连续相同的字符压缩成“字符+重复次数”的形式。例如,输入"zzzzzzzzzzz.",期望输出"z11."。

代码的主要逻辑是遍历字符串,统计当前字符连续出现的次数,当遇到不同字符时输出之前的统计结果。但代码中存在一个逻辑错误,导致输出结果不正确。

- 在循环中,当遇到不同字符时,你输出了当前字符和它的计数,但此时`current`变量已经被更新为新的字符,而`counter`被重置为1。这会导致输出时使用的`current`实际上是新字符,而不是刚刚统计完的那个字符。你应该在更新`current`之前输出旧的字符和计数。

- 循环结束后,最后一个字符的统计结果没有被输出。你需要考虑在循环外部补充输出最后一组字符和计数。