问题描述
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,
用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。
输入说明
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串
输出说明
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。
输入样例
a5b3aba13b4
输出样例
aaaaabbbabaaaaaaaaaaaaabbbb
#include<stdio.h> #include<stdlib.h> int main() { char str[51], ch; int flag = 0, i, j, a, b; gets(str); for (i = 0; str[i] != 0; i++) { if (str[i] < 48 || str[i]>57) { ch = str[i]; printf("%c", ch); //如果不是数字就及时输出,并标记flag为0 flag = 0; } else if (str[i] >= 48 && str[i] <= 57) { if (flag == 1) { //是个两位数 a = (int)str[i - 1] - 48; b = (int)str[i] - 48; for (j = 1; j <= (a * 10 + b - a); j++) { printf("%c", ch); } } if (flag == 0) { for (j = 1; j < (int)str[i] - 48; j++) { printf("%c", ch); } flag += 1; } } } return 0; }
主体思路:碰到字母就输出,并把该字母给ch,将flag标记为0
若碰到数字num则将flag+=1
若第一次遇见数字,该数字为a(flag=0)将ch输出num-1次(之前在碰到字母时已经输出了一次)
若第二次遇见数字(字母后面的是一个两位数),该数字为b(flag=1) 将ch输出(a*10+b-a)次(之前 已经 输出了a次)
难点:判断是不是两位数
标签:输出,ch,数字,西电,oj73,flag,str,字符串 From: https://www.cnblogs.com/LXYlxy666/p/17173546.html