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循环即可完成。
本文分享自微信公众号 - 卡尼慕(gh_40138f7dc7d3),作者:卡尼幕
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-11-06
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句