题意解析

输入一个字符串和三个参数p1,p2,p3p1,p2,p3并按以下规则进行扩写 诺输入了“-”号且左边字符小于右边字符则进行扩写 a-d则扩写为abcd 1.p1为1则字母扩写为小写 2.p1为2则字母扩写为大写 3.p1为3则扩写为“*” 4.扩写p2个 5.p3为1正序扩写 6.p3为2逆序扩写 7.左边字符为右边前一个则删去“-”去

思路解析

循环遍历字符串,利用多重if判断将不同情况分开解决

#include<bits/stdc++.h>
using namespace std;
int p1,p2,p3;
string s;
int main(){
	//freopen("zfc.in", "r", stdin);
	//freopen("zfc.out", "w", stdout);
	cin>>p1>>p2>>p3>>s;
	for(int i=0;i<s.size();i++){
		string ns;
		cout<<s[i];
		if(s[i+1]=='-'){//有"-"号
			if(s[i]>=s[i+2])continue;//左边字符大于右边字符
			else if('0'<=s[i] and '9'>=s[i] and 'a'<=s[i+2] and 'z'>=s[i+2])continue;//左边边字母右边数字
			else if('0'<=s[i] and '9'>=s[i] and '0'<=s[i+2] and '9'>=s[i+2]){//数字单独处理
				if(p1!=3){
				for(int j=1;j<s[i+2]-s[i];j++){
					char x=char(s[i]+j);
					for(int z=1;z<=p2;z++)ns=ns+x;
				}
				}
				else{
					for(int j=1;j<s[i+2]-s[i];j++){
					for(int z=1;z<=p2;z++)ns=ns+'*';
				}
				}
			}
			else if(s[i]=='-'){//连续"-"号
				continue;
			}
			else if(p1==1){//扩为小写
				for(int j=1;j<s[i+2]-s[i];j++){
					for(int z=1;z<=p2;z++)ns=ns+char(s[i]+j);
				}
			}
			else if(p1==2){//扩为大写
				for(int j=1;j<s[i+2]-s[i];j++){
					char x=char(s[i]+j-'a'+'A');
					for(int z=1;z<=p2;z++)ns=ns+x;
				}
			}
			else if(p1==3){//扩为"*"号
				for(int j=1;j<s[i+2]-s[i];j++){
					for(int z=1;z<=p2;z++)ns=ns+'*';
				}
			}
			if(p3==1)cout<<ns;
			else for(int j=ns.size()-1;j>=0;j--)cout<<ns[j];//倒序输出
			i++;
		}
	}
}

0 条评论

目前还没有评论...