1078 字符串压缩与解压

题目:

文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 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;int main() {char c;cin >> c;getchar();string s;getline(cin, s);//cout << s[39]<<endl;if (c == 'C') {//表示为压缩char pre = s[0];int cnt = 1;for (int i = 1; i < s.length(); i++) {if (s[i] == pre) {cnt++;}else {if (cnt >= 2) cout << cnt;cout << pre;cnt = 1;pre = s[i];}}//注意对末尾的处理if (cnt >= 2)cout << cnt;cout << pre;/*for (int i = 0; i < s.length();) {int flag = 0;int num = 0;if (i == s.length()-1) {if (s[i] == s[i - 1])num += 1;else {cout << s[i];flag = 1;}}while (flag == 0) {if (i < s.length() - 1&&s[i] != s[i + 1]) {flag = 1;if (num == 0)cout << s[i];elsecout << num+1 << s[i];break;}else {num++;}i++;}i++;}*/}else {//表示为解压string num;int cnt=1;//cnt初始值为1for (int i = 0; i < s.length(); i++) {if (s[i] >= '0'&&s[i] <= '9') {num += s[i];//若遇到数字则将字符串数字转化为int型数字cnt}else {if (num.length() > 0)cnt = stoi(num);while (cnt--)cout << s[i];cnt = 1;num = "";}}}
}

思路:

1 解压时,cnt初始值为1,若遇到数字则将字符串数字转化为int型数字cnt,之后输出cnt次当前字母。

2 压缩时,用pre保存前一个字母,当当前字母与pre相同时,cnt++;否则输出cnt(cnt>=2时才需输出cnt)和pre,然后令pre=当前字母。最后别忘记结尾处理:当cnt>=2时输出cnt,然后输出pre

1078 字符串压缩与解压相关推荐

  1. C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)

    1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来 ...

  2. 【简便解法】1078 字符串压缩与解压 (20分)_42行代码AC

    立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符 ...

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

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

  4. 1078. 字符串压缩与解压 (20)-PAT乙级真题

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

  5. 【PAT乙级】1078 字符串压缩与解压 (20 分)

    题目地址 #include<bits/stdc++.h> using namespace std; void a(string s) {string ans;int k=0;for(int ...

  6. 字符串压缩与解压 题解

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

  7. java字符串压缩js解压_接口实现后台GZIP压缩,pako.js 前端解压

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  8. 字符串压缩、解压算法

    1.字符串压缩作用: 减轻传输压力 简单加密传输内容 2.压缩算法进行字符串压缩测试效率对比结果 deflater > gzip 3.常用加密工具方法demo deflater压缩工具类 imp ...

  9. python3 zlib 实现压缩与解压字符串与文件数据流

    关于python3 zlib 压缩解压情况总结如下: 字符串:使用zlib.compress方法压缩字符串,使用zlib.decompress方法解压字符串. 数据流:压缩:zlib.compress ...

  10. Java利用Gzip对字符串进行压缩与解压

    在某些业务场景下,可能需要对字符串进行压缩与解压,压缩字符串可以使用 GZIPOutputStream 输出流来实现,而解压可以使用 GZIPInputStream 输入流来实现,下面先给出具体的参考 ...

最新文章

  1. Nucleus-SE迁移:未实现的设施和兼容性
  2. 岗位推荐 | 腾讯AI Lab招聘计算机视觉方向实习生
  3. 音视频技术开发周刊 80期
  4. PKU 1061 青蛙的约会
  5. CSS3 响应式布局之弹性网格
  6. 2017.3.18 糖果 思考记录
  7. Windows Server 2012中的DirectAccess部署
  8. HDU - 2196(树形DP)
  9. Spring AOP之XML配置
  10. Thinking in Java 14.7 动态代理
  11. Android系统最高的电视盒子,2019年电视盒子排行榜:市面上性能最强的电视盒子大盘点...
  12. 极值点、驻点、拐点的区别和联系
  13. 笔记本用HDMI转VGA转接线后,显示器没声音的解决方法
  14. 腾讯安全御见威胁情报中心截获粗鲁的矿工,三种方式猛攻企业网络
  15. python zxing 识别条码_Python zxing 库解析(条形码二维码识别)
  16. RT-Thread 模拟器 simulator 搭建 LVGL 的开发调试环境
  17. 车载以太网测试知识点
  18. 字节面试官推荐的一份 Java 基础面试题!太顶了
  19. Java 集合中汉字按自然顺序排序
  20. yum的配置文件yum.conf详解

热门文章

  1. dedeCMS采集插件自动采集文章自定义接口
  2. python打印日历_python 打印日历
  3. 解决安装pyspider过程中,ERROR: Command python setup.py egg_info failed with error code 10 问题
  4. Web前端学习笔记(四)--- CSS卡贴悬停展开效果
  5. Android 自定义价格日历控件
  6. word英文大写问题解决方案
  7. 三级等保 mysql8.0.24密码策略设置
  8. Python入门(八):对象类型之文件
  9. 采用Cordic算法求解atan反正切角度
  10. 常见的几个接口管理平台简介