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

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

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


文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。


解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。


本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

输入格式:

输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩;如果是 D 就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过 1000 个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。

输出格式:

根据要求压缩或解压字符串,并在一行中输出结果。

输入样例 1:

C
TTTTThhiiiis isssss a   tesssst CAaaa as

输出样例 1:

5T2h4is i5s a3 te4st CA3a as

输入样例 2:

D
5T2h4is i5s a3 te4st CA3a as10Z

输出样例 2:

TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZZZZ

 

 


#include<iostream>
#include<string>
using namespace std;
void jieya(string ln) {
  for (int i = 0; i < ln.length(); i++) {
    int times = 0;
    while(isdigit(ln[i])) {
      times = times *10 + (ln[i] - '0');
      i++;
    }
    for (int j = 0; j < times; j++) {
      cout << ln[i ];
    }
    if (times == 0)
      cout << ln[i];
    
  }
}
void yasuo(string ln) {
  for (int i = 0; i < ln.length(); i++) {
    int count = 0;
    while (ln[i] == ln[i + 1]) {
      i++; count++;
    }
    if (count != 0)
      cout << count + 1;
    cout << ln[i];
  }
}
int main()
{
  char choice; //C压缩, D解压
  string ln;
  cin >> choice;
  getchar();
  getline(cin, ln);
  //C
  if (choice == 'C')
    yasuo(ln);
  else
    jieya(ln);
  return 0;
}
相关文章
|
C++ Python
哈夫曼编码实现文件的压缩和解压
哈夫曼编码实现文件的压缩和解压
144 0
Java实现gz压缩与解压缩
Java实现gz压缩与解压缩
2377 0
|
1月前
|
存储 C#
C#使用哈夫曼编码实现压缩与解压
C#使用哈夫曼编码实现压缩与解压
29 0
|
4月前
|
Linux
c创建压缩文件,用于压缩模式,-v显示压缩进程,-x解压模式,-f创建的文件,解压文件,tar -cvf
c创建压缩文件,用于压缩模式,-v显示压缩进程,-x解压模式,-f创建的文件,解压文件,tar -cvf
|
6月前
|
算法
443.压缩字符串
443.压缩字符串
29 0
|
Java 程序员
批量压缩16万个文件夹为压缩包(.zip格式)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
279 0
批量压缩16万个文件夹为压缩包(.zip格式)
PTA 1078 字符串压缩与解压 (20 分)
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。
115 0
L1-4 字符串压缩 (10 分)
编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩: (1) 如果该字符是空格,则保留该字符; (2) 如果该字符是第一次出现或第三次出现或第六次出现,则保留该字符; (3) 否则,删除该字符。 例如,若用户输入“occurrence”,经过压缩后,字符c的第二次出现被删除,第一和第三次出现仍保留;字符r和e的第二次出现均被删除,因此最后的结果为:“ocurenc”。
104 0
某大厂的机试题,解压压缩的字母串
这几天看到一个大厂的面试题,感觉比较有意思,是学习递归的好题目,下面和大家分享一下这道题的解法。
某大厂的机试题,解压压缩的字母串