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;
}
相关文章
|
9月前
|
C++ Python
哈夫曼编码实现文件的压缩和解压
哈夫曼编码实现文件的压缩和解压
117 0
Java实现gz压缩与解压缩
Java实现gz压缩与解压缩
2253 0
|
1月前
|
算法
443.压缩字符串
443.压缩字符串
15 0
|
Java 程序员
批量压缩16万个文件夹为压缩包(.zip格式)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
220 0
批量压缩16万个文件夹为压缩包(.zip格式)
PTA 1078 字符串压缩与解压 (20 分)
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。
94 0
L1-4 字符串压缩 (10 分)
编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩: (1) 如果该字符是空格,则保留该字符; (2) 如果该字符是第一次出现或第三次出现或第六次出现,则保留该字符; (3) 否则,删除该字符。 例如,若用户输入“occurrence”,经过压缩后,字符c的第二次出现被删除,第一和第三次出现仍保留;字符r和e的第二次出现均被删除,因此最后的结果为:“ocurenc”。
86 0
Java字符串压缩(两种压缩方式)
第一种,只统计字符出现次数,比如aabcccccaaa,压缩成a5b1c5 思路:利用hashMap键的唯一性
1043 0
|
Serverless 对象存储 弹性计算
函数计算对文件进行压缩和解压缩使用总结
前言 函数计算具有弹性伸缩的能力,可以给用户带来免运维和毫秒级扩容的计算能力。 但是它也存在一些限制, 比如一个执行环境最大内存只有3G, 本文旨在进行总结一些函数计算在文件压缩和解压缩的一些实践案例, 希望能给大家抛砖引玉,引出更好的实践案例。
2907 0
|
Linux vr&ar
Linux下常用压缩格式的压缩与解压方法
linux 压缩解压工具:zip unzip star gzip
392 0