LXYlxy666

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题描述
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,
用该字符加上连续出现的次数来表示(连续出现次数小于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次)

 

难点:判断是不是两位数

posted on 2023-03-03 20:57  printf("赖狒狒");  阅读(49)  评论(1编辑  收藏  举报