题目链接: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;
}