PTA 乙级 1078 字符串压缩与解压 (20 分) C++

 

 这个题用C我是一个一个字符处理的

有几个需要注意的点

  • 不管压缩还是解压,注意第一行输入的'\n'输入一定要处理,我是用了一个字符去存储(之后这个字符被清零了,用作接下来的数据的处理,重复利用)

当需要压缩时

我是记录当前字符和上一个字符,当上一个字符和当前字符不同时,则输出压缩后的字符

  • 当字符数为1时不要输出1
  • 注意首个字符的处理,此时上一个字符尚未初始化,要特殊处理

当需要解压时

  • 也需要注意字符数为1的情况

C/C++

 1 #include <iostream>
 2 #include <string>
 3 #include <stdlib.h>
 4 #include <cmath>
 5 
 6 using namespace  std;
 7 
 8 int main() {
 9     char s, last, c;
10     int num = 0;
11     string sum = "0";                               //一定要初始化,否则测试点2会有运行时错误
12     c = getchar();
13     last = getchar();                               //用于接收第一行输入结尾的空格
14     last = NULL;
15     if(c == 'C') {
16         while (last != '\n') {                      //回车换行时结束
17             s = getchar();
18             if (s != last && last != NULL) {        //字母变换时则输出(排除last还没值时的输入)
19                 if (num == 1) cout << last;
20                 else cout << num << last;
21                 num = 0;
22             }
23             num++;
24             last = s;
25         }
26     } else if (c == 'D') {
27         while (last != '\n') {
28             s = getchar();
29             if (!(s >= '0' && s <= '9')) {          //若输入不为数字,此时输出字符
30                 for (int i = 0; i < stoi(sum); ++i) {
31                     cout << s;
32                 }
33                 if (sum == "0") cout << s;          //处理只有一个字符的情况
34                 sum = "0";
35                 num = 0;
36             } else if (s >= '0' && s <= '9') {      //用字符串相加来处理输出字母个数大于10的情况
37                 sum += s;
38                 num++;
39             }
40             last = s;
41         }
42     }
43     return 0;
44 }

 

 

posted @ 2021-10-03 22:12  上帝的绵羊  阅读(231)  评论(0编辑  收藏  举报