破大防,30分繁杂代码求调......
查看原帖
破大防,30分繁杂代码求调......
956316
77Glorious楼主2023/11/2 10:10

写得很急因为信息课时间太少,而且还含有重复判断条件,求大佬调,晚上改!!!

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

int p1,p2,p3;
string a;

bool jdg(char x,char y){
	if('a'<=x && x<='z') return 1;
	else if('0'<=x && x<='9') return 1;
	else if(x==y || x>y ) return 0;
	return 0; 
}
//小写-小写 或者 数字-数字,左边<右边,展开

//p1=1,字母小写,数字填充 
//p1=2,字母大写,数字填充 
//p1=3,字母星号,数字星号

//p2=k,每个字符填充k个 

//p3=1,顺序 p3=2,逆序

//左边+1=右边,删除减号
//左边>=右边,保留减号 

void zk(char x,char y){
	if(p1==1){//小写,字母和数字都不用管 
	if(p3==1){//顺序 
		for(char i=x+1;i<=y-1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//顺序 
	
	else if(p3==2){//逆序 
		for(char i=y-1;i<=x+1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//逆序 		 
	}//小写 
	
	else if(p1==2){//大写,字母大写,数字不变
	if(isdigit(x)&&isdigit(y)){//都是数字就直接复制
	 if(p3=1){//顺序 
		for(char i=x+1;i<=y-1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//顺序 
	
	else if(p3==2){//逆序 
		for(char i=y-1;i<=x+1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//逆序 		 
	}//都是数字就直接复制
	
	else if(isalpha(x)&&isalpha(y)){//都是字母就全变大写
		if(p3==1){//顺序 
		for(char i=x-32+1;i<=y-32-1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//顺序 
	
	else if(p3==2){//逆序 
		for(char i=y-32-1;i<=x-32+1;i++){//i是字符 
			for(int j=1;j<=p2;j++)
				cout<<i;//指定个数 
		}//i是字符 
	}//逆序 		  
	}
	
	}//大写 
	
	
	else if(p1==3){//星号 
		for(char i=x+1;i<=y-1;i++){
			for(int j=1;j<=p2;j++){
				cout<<'*';
			}
		}
	
	}//星号 
	
}

int main(){
	cin>>p1>>p2>>p3>>a;
	for(int i=0;i<a.length();i++){
		if(a[i]=='-'){// a[i]=='-'
		if(jdg(a[i-1],a[i+1])){//同为字母或数字
			if(a[i-1]<a[i+1]){//a[i-1]严格<a[i+1]
				 zk(a[i-1],a[i+1]);//进行展开 
			}//a[i-1]严格<a[i+1]
		}//同为字母或数字
		
		else if(a[i-1]==a[i+1]) cout<<a[i];
		else if(a[i-1]>a[i-1]) cout<<a[i];
		
		}//a[i]=='-'
	  else	cout<<a[i];
	}
	
	return 0;
}
2023/11/2 10:10
加载中...