首页 > 其他分享 >1078 字符串压缩与解压——20分

1078 字符串压缩与解压——20分

时间:2022-08-15 11:56:31浏览次数:57  
标签:解压 字符 20 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

| 代码长度限制 | 时间限制 | 内存限制 |
| 16KB | 400ms | 64MB |

代码:

#include<bits/stdtr1c++.h>
using namespace std;
void slove1(string s) {
	for (int i = 0; i < int(s.size()); i++) {
		int cnt = 0;
		while (s[i] == s[i + 1])
			i++, cnt++; //向后移位同时记录连续相同字符的数量
		if (cnt != 0) cout << cnt + 1;
		cout << s[i];
	}
}
void slove2(string s) {
	for (int i = 0; i < int(s.size()); i++) {
		string sum = "";
		while (isdigit(s[i]))
			sum += s[i++]; //将字符串中每一位0~9数字形式的字符存入sum中,便于转成int型的数字
		if (sum != "") //说明有连续相同的多个字符
			for (int j = 0; j < stoi(sum); j++) cout << s[i]; //输出多个字符
		else
			cout << s[i]; //如果sum为空,说明字符并不连续,只有一个
	}
}
int main() {
	char c;
	string s;
	cin >> c;
	getchar();
	getline(cin, s);
	if (c == 'C')
		slove1(s); //压缩字符串
	else if (c == 'D')
		slove2(s); //解压字符串
	return 0;
}

标签:解压,字符,20,1078,输出,压缩,样例,字符串
From: https://www.cnblogs.com/Fare-well/p/16587777.html

相关文章

  • [NOIP2013 提高组] 积木大赛
    试题分析:题目虽然可以用递归,但最优方法还是用贪心,每次输入进去,如果比前一个数小,那么减前一个数时就可以顺便把他减掉,如果大于则还得自己减。代码: ......
  • Gym102798 CCPC2020威海E加强版 题解
    原题link把\(m\)和\(a_i\)的上界改成\(200\),其他不变.基本思路:枚举\(S\),求出\(p(S)\)表示集合\(S\)中的怪兽被打死的概率,答案就是\(\sum_{S}|S|p(S)\).而这......
  • CSP202112-4 磁盘文件操作
        第一眼,嗯,线段树裸题。开写,交,发现空间炸了,遂离散化。再交,发现在操作0的时候有可能遇到离散化中没出现过的点(即给定数据外的点),因为要二分右端点。怎么办呢?大胆观......
  • 【2022-08-14】工作的意义
    20:00无论世界上的行业丰富到何种程度,机遇又多到何种程度,我们每一个人比较能做好的事情,永远也就那么几种而已。有时,仅仅一种而已。            ......
  • office办公软件大全:Microsoft Office LTSC 2021 for Mac
    office2021forMac商业预览Mac版office2021包括Word,Excel,PowerPoint,Outlook,OneDrive,最新版本的office将附带新的深色模式支持,辅助功能改进,对Word、Excel、PowerPoint、......
  • [2001年NOIP普及组] 求先序排列
    前序遍历的规则:(1)访问根节点   (2)前序遍历左子树(3)前序遍历右子树中序遍历的规则:(1)中序遍历左子树 (2)访问根节点  (3)中序遍历右子树后序遍历二叉树的规则: (1)后序遍历左......
  • 2022-08-08 第六组 李俊琦 IO流
    今日重点JUnit单元测试Stream编程(JDK8新增)JavaIO流---对于文件的操作学习内容JUnit单元测试的好处:1).可以书写一系列的测试方法,对项目的所有的接口或者方法进行单元......
  • 20220505模拟赛总结(ABC237)
    总结初一第一,竞赛班第二还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩这次做的其实是AtCoderABC237A.NotO......
  • 2022-08-04 第六组 李俊琦 锁与线程池
    今日重点LockSupport工具类Lock锁synchronized和Lock的区别并发编程三大特征JVS并发编程包线程池参数的意义(重要)学习内容LockSupport工具类线程阻塞的工具类,所有......
  • vs2008在调用第三方dll时会报错:System.Runtime.InteropServices.SEHException的解决办
     1、在vs2008中调用第三方dll时,运行后调用其中的函数时,会报错:System.Runtime.InteropServices.SEHException,如下图:  在网上查了,没有找到什么原因,不过找到了解决办......