字符串的展开

题目-牛客

这段代码实现了对输入字符的展开操作。具体流程如下:

  1. 从输入中读取参数p1,p2和p3。
  2. 从输入中读取待展开的字符串。
  3. 创建一个空字符串result用于保存展开后的结果。
  4. 遍历输入字符串中的每个字符:
  • 如果当前字符是减号并且两侧的字符符合展开条件,即两侧字符都是小写字母或数字,并且右侧字符比左侧字符大:
    • 根据展开方式p1和字符类型来填充字符:
    • 如果p1是1或2,即填充字母,则使用tolower或toupper函数将前一个字符转换为小写或大写,然后将填充字符添加到结果字符串中。
    • 如果p1是3,即填充星号,则将(nextChar - prevChar - 1) * p2个星号添加到结果字符串中。
    • 跳过当前的减号。
  • 如果当前字符不是减号或不满足展开条件,则直接将当前字符添加到结果字符串中。
  1. 如果p3是2,即结果需要翻转,则使用reverse函数将结果字符串翻转。
  2. 输出最终结果字符串。

这样,根据给定的参数和输入字符串,程序就能够进行相应的展开操作并输出最终结果。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string solution(string s,int p1,int p2,int p3){
	string res="";
	string temp="";
	int n=s.size();
	for(int i=0;i<n;i++){
		if(s[i]=='-'&&i>0&&i<n-1&&((islower(s[i-1])&& islower(s[i+1])
		&&s[i-1]<s[i+1])||(isdigit(s[i-1])&&isdigit(s[i+1])&&s[i-1]<s[i+1]))){
			if(p1==1||p1==2){
				char fill=(p1==1)?tolower(s[i-1]):toupper(s[i-1]);
				for(char j=s[i-1]+1;j<s[i+1];j++){
					fill=(p1==1)?tolower(j):toupper(j);
					for(int k=0;k<p2;k++){
						temp+=fill;
					}			
				}
			}
			if(p1==3){
				for(int j=0;j<(s[i+1]-s[i-1]-1)*p2;j++)
				res+="*";
			}
			if(p3==2) {reverse(temp.begin(),temp.end());}
			res+=temp;
			temp="";
		}
		else 
		res+=s[i];
	}
	
	return res;
	
}
int main()
{
	int p1,p2,p3;
	cin>>p1>>p2>>p3;
	string s;
	cin>>s;
	string res=solution(s,p1,p2,p3);
	cout<<res<<endl;
	
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值