Problem Description
将形如xxxxxdddfff的字符串,压缩为x5d3f3,字符后面的数字表示前面字符在原字符串中出现的次数。若字符只出现一次,则无需再字符后面加数字。
Input
输入一个字符串。
Output
输出压缩后的字符串。
Sample Input
xxxxxdddfff
abcd
Sample Output
x5d3f3
abcd
解题思路
- 设置计数器,遍历输入字符串。
- 若当前字符与后面一个字符相同,计数加1;若不同,则输出该字符的压缩结果。
经验总结
- 输出后,需重置计数器。
代码实现(C)
#include <stdio.h>
#include <string.h>
#define MaxSize 1000
int main() {
char str[MaxSize];
while (~scanf("%s", str)) {
int count = 1; // 计数器
int len = (int) strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] == str[i + 1]) // 遇到相同字符,计数加1
count++;
else { // 遇到不同字符,输出压缩结果
printf("%c", str[i]);
if (count > 1)
printf("%d", count);
count = 1; // 重置计数器
}
}
printf("\n");
}
return 0;
}