字符串压缩算法
有一种简单的字符串压缩算法,对于字符串中连续出现的同一字符,用该字符加上连续出现的次数来表示(连续出现次数小于3的不压缩)。
设计程序,将采用该压缩方法压缩后的字符串解压还原为原字符串并输出。
输入样例:
ab5a10c5
输出样例:
abbbbbaaaaaaaaaaccccc
办法分析
对输入的字符串进行逐个扫描,如果遇到字符串直接输出,如果遇到数字,则逐个读取数字字符将其转为int型数字,然后输出该数字个前一字符。
代码实现
#include <stdio.h>
#include <ctype.h>
int main(){
char input[20],tmp,c;
int i=0;
gets(input);
while(input[i]){
c=input[i];
if(tolower(c)>='a'&&tolower(c)<='z') {
printf("%c",c);
i++;
}
else if(c>='0'&&c<='9'){
tmp=input[i-1];
int num=0;
while(input[i]>='0'&&input[i]<='9'){
num=num*10+input[i]-'0';
i++;
}
num-=1;
while(num--){
printf("%c",tmp);
}
}
}
return 0;
}
参考代码
#include <stdio.h>
int main()
{
int i = 0, sum, count, k;
char s[50];
gets(s);
while (s[i])
{
printf("%c", s[i]);
i++;
sum = 0;
count = 0;
while (s[i] >= '0' && s[i] <= '9')
{
sum = sum * 10 + s[i] - '0';
i++;
count++;
}
for (k = 0; k < sum - 1; k++)
printf("%c", s[i - count - 1]);
}
return 0;
}
链接:
https://mp.weixin.qq.com/s/SZwH2T_GBMJscpL-sf4OJw