XDOJ_字符串压缩——MZH

本文介绍了一个简单的字符串压缩算法,用于处理连续重复字符,然后给出了C语言的代码实现,用于将压缩后的字符串如a5b3aba13b4解压缩回原始字符串aaaaabbbabaaaaaaaaaaaaabbbb。
摘要由CSDN通过智能技术生成

字符串压缩

问题描述    
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。

输入说明    
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串

输出说明    
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。

输入样例    
a5b3aba13b4

输出样例    
aaaaabbbabaaaaaaaaaaaaabbbb

代码实现

#include <stdio.h>
#include <string.h>

int main() {
	char s[10001], c, pos = 0, num = 1, num2 = 0, i = 0;
	int n[101];
	gets(s);
	if (strlen(s) == 0) {//如果是空字符串(好像没有用到)
		printf("\n");
		return 0;
	}
    //pos为0时代表上一个是数字或者是刚开始输入,为1时代表上一个也为字母
	while (i < strlen(s)) {
		if (s[i] >= 'a' && s[i] <= 'z' && pos == 1 || s[i] >= 'A' && s[i] <= 'Z' && pos == 1) {//上一个为字母直接输出
			printf("%c", c);
			c = s[i];
			pos = 1;
		}
		if (s[i] >= 'a' && s[i] <= 'z' && pos == 0 || s[i] >= 'A' && s[i] <= 'Z' && pos == 0) {//上一个不为字母先存起来
			c = s[i];
			pos = 1;
		}
		if (s[i] >= '0' && s[i] <= '9' && pos == 1) {
			pos = 0;
			n[num] = s[i] - '0';
			while (s[num + i ] >= '0' && s[num + i ] <= '9') {
				//pos = 0;
				num++;//记录位数
				n[num] = s[num + i - 1] - '0';//存储各位数字
			}
			i += num;//进行位置移动
			/*if (num == 1 && n[num] == 2) {
				printf("%c", s[i - 1]);
				continue;
			}*/
			for (register int j = 1; j <= num; j++) {
				num2 *= 10;
				num2 += n[j];
			}
			for (register int j = 1; j <= num2; j++) {
				printf("%c", c);
			}
			num2 = 0;
			num = 1;
			continue;
		}
		i++;//进行位置移动
		num2 = 0;
		num = 1;
	}
	if (pos == 1) {//如果以单个字母结尾
		printf("%c", c);
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值