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~