您的位置:首页 > 其它

1078. 字符串压缩与解压 (20)

2018-03-08 22:34 309 查看
题目链接:https://www.patest.cn/contests/pat-b-practise/1078

解题思路:主要考查字符串的处理,需要注意的地方是接收字符串和按照题目所给格式进行正确的排版输出。

#include<cstdio>
#include<cstring>
const int  maxn= 1010;
void compress(char *str){
int len=strlen(str);
for(int i=1;i<=len;i++){
int count=1;
while(str[i]==str[i-1]){
count++;
i++;
}
if(count==1&i!=1) //str[0]不输出,只是随便放的一个字符
printf("%c",str[i-1]);
else if(i!=1){
printf("%d%c",count,str[i-1]);
}
}
if(str[len-1]!=str[len]) printf("%c",str[len]);
printf("\n");
}
void decompress(char *str){
int len=strlen(str);
for(int i=1;i<=len;i++){
int tmp=0;
while(str[i]>='0'&&str[i]<='9'){
tmp=tmp*10+str[i]-'0';
i++;
}
for(int j=0;j<tmp-1;j++){  //此处,输出tmp-1次就够了,因为自身为非数字时会再输出一次
printf("%c",str[i]);
}
if(str[i]<'0'||str[i]>'9') printf("%c",str[i]);
}
printf("\n");
}
int main(){
char c;
char str[maxn];
scanf("%c",&c);
getchar();
gets(str+1);//此处从str[1]开始接收,主要是为了压缩字符串的时候方便前后比较免得越界。
str[0]='*';
if(c=='C'){
compress(str);
}else if(c=='D'){
decompress(str);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: