C/C++压缩密文

C/C++压缩密文

题目描述
华华接到任务:要对一个仅有英文字母的密文进行压缩处理,将其中连续的重复字母压缩成“一个字母+个数”的形式。例如:AaaaaaaaAaaBbBaAC应压缩成a11b3a2c。但是华华拿到的密码已经被别人处理过,密文没有完全压缩好,处理起来反而更麻烦。如上例密文可能已变成Aa10b2BaAC。请编程帮华华完成任务。

输入
华华拿到的密文字串(串长度<=100,串中所有重复个数之和<=1000)

输出
完成处理的密文字串(其中的字母全部小写)

样例输入
Aa10b2BaAC

样例输出
a11b3a2c

这道题思路很清晰,先解压,再压缩,代码:

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
char s[200],s1[9999999];
int i,p=-1;
bool f;
int main()
{
	cin>>s;
	int c=strlen(s);
	for(i=0;i<c;i++)
	{
		if(s[i]>=65&&s[i]<=90) s[i]+=32;
	}
	for(i=0;i<c;i++)
	{
		if(s[i]>'9') s1[++p]=s[i];
		if(s[i]<='9'&&s[i]>='0') f=true;
		if(f==true)
		{
			char g=s[i-1];
			int len=0,opo=0;
			char l[200];
			for(int j=0;j<=199;j++) l[j]='0';
			while(s[i]>='0'&&s[i]<='9')
			{
				l[len]=s[i];
				i++;
				len++;
			}
			i--;
			for(int j=0;j<len;j++)
			{
				opo+=pow(10,j)*(l[len-j-1]-48);
			}
			for(int j=0;j<opo-1;j++)
			{
				s1[++p]=g;
			}
			f=false;
		}
	}
	char g;
	for(i=0;i<=p;i++)
	{
		int len=0;
		g=s1[i];
		while(s1[i]==g)
		{
			i++;
			len++;
		}
		i--;
		cout<<g;
		if(len>1) cout<<len;
	}
	return 0;
}

看懂了吗¿?加油,OLG~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值