B 1078 字符串压缩与解压(字符串处理+利用stoi函数)

该博客探讨了字符串处理的问题,包括如何压缩和解压字符串。在解压过程中,遇到识别数字并输出相应数量字母的挑战,通过创建辅助字符串并使用stoi函数解决了问题。在压缩字符串时,使用计数法来判断何时输出重复字符。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

思路

  1. 总体而言,因为不确定输入字符串的个数,所以用getline输入一行中所有字符串再进行遍历讨论;
  2. 对于解压:需要识别字符串中的数字,并输出n个后一位的字母。问题在于数字不能确定是几位。若默认最多出现两位数字,则有两个测试点会出错。
    解决办法是通过新建字符串ss,当出现数字则加入ss中,再利用stoi函数转为整型输出。
  3. 对于压缩:用一个字符记录前一位,每次出现的与前一位相同时cnt计数,当不同时再由cnt的大小来进行判断输出。

AC代码

#include<bits/stdc++.h>
using namespace std;

int main(){
	char z; cin>>z;
	string s;	
	getchar();
	getline(cin,s);
	int len=s.length();	

	if(z=='C'){
		int cnt=1;
		char pre = s[0];
		for(int i=1;i<len;i++){
			if(s[i]==pre) cnt++;
			else {
				if(cnt>=2) cout<<cnt;
				cnt=1;
				cout<<pre;
				pre=s[i];
			}
		}
		if(cnt>=2) cout<<cnt;
		cout<<pre;
	} 
	
	else if(z == 'D'){
		int n;
		string ss;
		for(int i=0;i<len;i++){
			if(s[i]>='0'&&s[i]<='9'){
				ss +=s[i];
			}
			else {
				if(ss.length()>=1){
					n = stoi(ss);
					for(int j=0;j<n;j++) cout<<s[i];
					n=1;
					ss="";
				}
				else cout<<s[i];
			}
		}
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值