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循环即可完成。