蒟蒻只过了三个点呜呜呜,求大佬指教orz
查看原帖
蒟蒻只过了三个点呜呜呜,求大佬指教orz
127169
Baiwhiter楼主2020/9/16 17:23
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
stack<char> fanz;
bool gan;
char s[110];
char ans[1001000];
int p1,p2,p3;
bool cc=1;
//bool flagp11,flagp12,flagp13;
int totyou;//右移位数 
int lenl;
char check(char now,int way){//处理填充方式 
	 if((int)now>=48 && (int)now<=57){
	 	return now;
	 }
	 if(way==1){
	 	char x;
	 	if((int)now>=97 && (int)now<=122){
	 		return now;
		 }else{
		 	x=(char)(int)now+32;
		 	return x;
		 }
	 }
	 if(way==2){
	 	char x;
	 	if((int)now>=65 && (int)now<=90){
	 		return now;
		 }else{
		 	x=(char)(int)now-32;
		 	return x;
		 }
	 }
	 if(way==3){
	 	char x;
	 	x='*';
	 	return x;
	 }
}
int tian(int t,int flag,int way,char st,char ed){//t=填充次数,flag是否逆序,way 填充方式后面判断 
    char cmp[10010];int totyou2=0;//填充数组的右移位数 
    int n;
    //int dis=0;
    int x,y;
    x=(int)st;
    y=(int)ed;
    for(int i=x+1;i<y;i++){//加一是为了找到下一位 
    	char tmp;
    	tmp=(char)i;//需要填充的字符
    	tmp=check(tmp,way);
    	//cout<<tmp<<endl;;
    	if(t){//填充次数
    	    if(t==1){
    	    	cmp[totyou2]=tmp;
			}else{
				for(int j=0;j<t;j++){
					cmp[totyou2+j]=tmp;
				}
			}
			totyou2+=t;
		}
		//dis++;
	}
	if(flag){//栈实现数组翻转 
//		char cmp2[100010];
		int longcmp=strlen(cmp);
		for(int i=0;i<longcmp;i++){
			fanz.push(cmp[i]);
//			cmp2[i]=cmp[longcmp-i];
//			cout<<"nowcmp[i]="<<cmp[i]<<endl;
//			cout<<"nowcmp2[i]="<<cmp2[i]<<endl;
		}
		int o=0;
		while(!fanz.empty()){
			cmp[o]=fanz.top();
			o++;
			fanz.pop();
		}
//		for(int i=0;i<longcmp;i++){
//			cmp[i]=cmp2[i];
//		}
        
	}
	//puts(cmp);
	//cout<<endl;
    strcat(ans,cmp);
    n=strlen(cmp)-1;
    //cout<<"nowans=";
    //puts(ans);
    return n;
}
int main(){
	gan=1;
	cin>>p1>>p2>>p3;
	if(p3==2 || p3==1){
		p3-=1;
	}
	//tot=p2;
	cin>>s;
	lenl=strlen(s);
	for(int i=0;i<lenl;i++){
//		if(s[i]=='-' && gan){
//			ans[i]=s[i];
//		}
		if(s[i]!='-' && cc){
			gan=0;
			ans[i+totyou]=s[i];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
			//cout<<"nows="<<s[i]<<endl;
			//cout<<"nowans=";
            //puts(ans);
		}
		//cout<<s[i]<<endl;
		cc=1;
		if(s[i]=='-'){
			if((int)s[i-1]==((int)s[i+1]-1)){//同后继 
				//totyou+=1;
				ans[i+totyou]=s[i+1];
				totyou+=1;
				//puts(ans);
				//cout<<s[i]<<s[i+1]<<endl;
				cc=0;
				continue;
			}
			//totyou+=tian(p2,p3,p1);
		    if((int)s[i-1]>=(int)s[i+1]){//减号两边相同的情况 
                ans[i+totyou]=s[i];
                continue;
			}
			totyou+=tian(p2,p3,p1,s[i-1],s[i+1]);
			//cout<<"nowtotyou="<<totyou<<endl;

		}
	}
//	int out1=strlen(ans);
//	
//	for(int i=0;i<out1;i++){
//		cout<<ans[i];
//	}
	puts(ans);
	//cout<<ans<<endl;
	return 0;
}
2020/9/16 17:23
加载中...