欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-15 16:28:06
...

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

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

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

【我的代码】

 1// 1078 字符串压缩与解压 (20 分)
 2#include <iostream>
 3#include <string>
 4using namespace std;
 5int main(){
 6    char C;
 7    cin>>C;
 8    string tmp;
 9    int len;
10    char index;
11    int count = 1;
12    getchar();//读取换行符 
13    getline(cin, tmp);
14    len = tmp.length();
15    if(C == 'C'){
16        //压缩
17        index = tmp[0];
18        for(int i = 1; i <= len; i++){
19            if(tmp[i] == index)
20                count++;
21             else{
22                if(count > 1){
23                    cout<<count<<tmp[i-1];
24                 }
25                 else{
26                    cout<<tmp[i-1];
27                 }
28                 count = 1;
29             }
30             index = tmp[i];
31         }
32    }
33    else if(C == 'D'){
34        //解压 
35        for(int i = 0; i < len; i++){
36            int sum = 0;
37            while(tmp[i] >= '0' && tmp[i] <= '9'){
38                sum = sum *10 + (tmp[i++] - '0');
39            }
40            for(int j = 0; j < sum; j++)
41                cout << tmp[i];
42            if(sum == 0)
43                cout << tmp[i];
44        } 
45    } 
46    return 0;
47}

【总结】

本题实际上可以拆分成两个小问题,分别来实现即可。

压缩的情况,我们根据前一个字符与当前字符进行对比,将相同且连续的字符进行计数,当出现第一个不相同的时候结束,并且同时对前一个字符进行输出。

解压的情况就简单很多,有数字的且不是最末尾的话,说明是下一个字符压缩而成的,因此使用一个for循环即可完成。