P1098 [NOIP2007 提高组] 字符串的展开//就差十分!!
  • 板块题目总版
  • 楼主ly_magician
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/12 21:25
  • 上次更新2024/1/13 09:32:05
查看原帖
P1098 [NOIP2007 提高组] 字符串的展开//就差十分!!
1185854
ly_magician楼主2024/1/12 21:25
using namespace std;
int p1,p2,l,p3,i=0;
string a;
int main(){
	cin>>p1>>p2>>p3;
	cin>>a;
	int len=a.size();
	while(i<len){
		if(a[i]=='-'&&i==0){
			cout<<'-';
			i++;
			continue;
		}
		else if(a[i]=='-'&&i==len-1){
			cout<<'-';
			return 0;
		}
		else if(a[i+1]<=a[i-1]&&a[i]=='-'||a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='0'&&a[i+1]<='9'&&a[i]=='-'||a[i+1]>='a'&&a[i+1]<='z'&&a[i-1]>='0'&&a[i-1]<='9'&&a[i]=='-'){//如果减号右边的字符按照ASCII码的顺序小于或等于左边字符
			cout<<'-'<<a[i+1];
			i+=2;
			continue;
		}
		else if(a[i]!='-'){
			cout<<a[i];
			i++;
			continue;
		}//遇到下面的情况需要做字符串的展开,在输入字符串中,出现了减号“-” 
		else if(a[i]=='-'&&a[i+1]>a[i-1]&&a[i+1]!='-'&&a[i-1]!='-'){
			if(p1==1&&p3==1){//参数p1:展开方式,p1=1时,对于字母子串,填充小写字母; 
				for(int k=a[i-1]+1;k<=a[i+1]-1;k++)
					for(int o=1;o<=p2;o++) cout<<char(k);
			}
		//..................................................................... 
			if(p1==2&&p3==1){//p1=2时,对于字母子串填充大写字母
				if(a[i-1]>='a'&&a[i+1]>='a'&&a[i-1]<='z'&&a[i+1]<='z')
					for(int k=a[i-1]+1;k<=a[i+1]-1;k++)
						for(int o=1;o<=p2;o++) cout<<char(k-32);//p2:填充字符的重复个数 
				else for(int k=a[i-1];k<=a[i+1];k++)
					for(int o=1;o<=p2;o++) cout<<char(k);//p2:填充字符的重复个数 
			}
		//.....................................................................
			if(p1==3){//p1=3时,不论是字母子串还是数字子串,都要与要填充的字母个数相等的星号“*”来补充
				for(int k=a[i-1]+1;k<=a[i+1]-1;k++)
					for(int o=1;o<=p2;o++) cout<<'*';//p2:填充字符的重复个数
			}
		//.....................................................................
			if(p1==1&&p3==2){//参数p1:展开方式,p1=1时,对于字母子串,填充小写字母;
					for(int k=a[i+1]-1;k>=a[i-1]+1;k--)
						for(int o=1;o<=p2;o++) cout<<char(k);//p2:填充字符的重复个数
			}
		//.....................................................................
			if(p1==2&&p3==2){//p1=2时,对于字母子串填充大写字母
				if(a[i-1]>='a'&&a[i+1]>='a'&&a[i-1]<='z'&&a[i+1]<='z')
					for(int k=a[i+1]-1;k>=a[i-1]+1;k--)
						for(int o=1;o<=p2;o++) cout<<char(k-32);//p2:填充字符的重复个数
				else for(int k=a[i+1]-1;k>=a[i-1]+1;k--)
					for(int o=1;o<=p2;o++) cout<<char(k);//p2:填充字符的重复个数
			}
			cout<<a[i+1];
			i+=2;
		}
		//.....................................................................
	}
	return 0;
}
//哪位大佬帮忙看看是哪里的问题
2024/1/12 21:25
加载中...