RE求调(有注释)(在线等)
查看原帖
RE求调(有注释)(在线等)
1545314
Westbrook_楼主2025/1/5 22:12
#include<bits/stdc++.h>
using namespace std;
bool iszheng(string s){//一个判断字符串是否符合3个条件的代码 
	int diyi=0,dier=0,disan=0,now=99999,xiaoxie=0,daxie=0,shuzi=0,zifu=0,now2=1;
	if(s.size()>=6&&s.size()<=12) //如果长度合适,第一个条件正确,赋值为1否则赋值0 
	    diyi=1;
	else
	    diyi=0;
	//以上4行代码判断第一个条件符不符合,因为第一个条件很简单,所以不需要准备什么,直接判断    
	    
	    
	for(int i=0;i<s.size();i++){//遍历整个字符串,开始操作 
		if(s[i]=='a'||s[i]=='b'||s[i]=='c'||s[i]=='d'||s[i]=='e'||s[i]=='f'||s[i]=='g'||s[i]=='h'||s[i]=='i'||s[i]=='j'||s[i]=='k'||s[i]=='l'||s[i]=='m'||s[i]=='n'||s[i]=='o'||s[i]=='p'||s[i]=='q'||s[i]=='r'||s[i]=='s'||s[i]=='t'||s[i]=='u'||s[i]=='v'||s[i]=='w'||s[i]=='x'||s[i]=='y'||s[i]=='z'){
			xiaoxie++;//如果是小写字母,那么小写字母计数器++ 
		}
		else if(s[i]=='A'||s[i]=='B'||s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='F'||s[i]=='G'||s[i]=='H'||s[i]=='I'||s[i]=='J'||s[i]=='K'||s[i]=='L'||s[i]=='M'||s[i]=='N'||s[i]=='O'||s[i]=='P'||s[i]=='Q'||s[i]=='R'||s[i]=='S'||s[i]=='T'||s[i]=='U'||s[i]=='V'||s[i]=='W'||s[i]=='X'||s[i]=='Y'||s[i]=='Z'){
			daxie++;//如果是大写字母,那么同理++ 
		}
		else if(s[i]=='0'||s[i]=='1'||s[i]=='2'||s[i]=='3'||s[i]=='4'||s[i]=='5'||s[i]=='6'||s[i]=='7'||s[i]=='8'||s[i]=='9'){
			shuzi++;//如果是个数字,那么++ 
		}
		else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
			zifu++;//如果是字符也++ 
		}
		//以上12行代码为判断第三个条件做准备
		//为什么不按1,2,3条件的顺序来,是因为2和3的判断顺序结构有冲突,就先为3准备了 
		if(s[i]=='a'||s[i]=='b'||s[i]=='c'||s[i]=='d'||s[i]=='e'||s[i]=='f'||s[i]=='g'||s[i]=='h'||s[i]=='i'||s[i]=='j'||s[i]=='k'||s[i]=='l'||s[i]=='m'||s[i]=='n'||s[i]=='o'||s[i]=='p'||s[i]=='q'||s[i]=='r'||s[i]=='s'||s[i]=='t'||s[i]=='u'||s[i]=='v'||s[i]=='w'||s[i]=='x'||s[i]=='y'||s[i]=='z'||s[i]=='A'||s[i]=='B'||s[i]=='C'||s[i]=='D'||s[i]=='E'||s[i]=='F'||s[i]=='G'||s[i]=='H'||s[i]=='I'||s[i]=='J'||s[i]=='K'||s[i]=='L'||s[i]=='M'||s[i]=='N'||s[i]=='O'||s[i]=='P'||s[i]=='Q'||s[i]=='R'||s[i]=='S'||s[i]=='T'||s[i]=='U'||s[i]=='V'||s[i]=='W'||s[i]=='X'||s[i]=='Y'||s[i]=='Z'||s[i]=='0'||s[i]=='1'||s[i]=='2'||s[i]=='3'||s[i]=='4'||s[i]=='5'||s[i]=='6'||s[i]=='7'||s[i]=='8'||s[i]=='9'||s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
			now=1;//如果在范围内那么now是1 
		}
		else{
			now2=0;//如果有不在范围内的,那么赋值为0。这里不写成now=0是因为怕后面有在范围内的,就又给刷新成1了,但是实际上只要是有不在范围内的他就不对。所以用了个新变量now2 
		}
		//以上6行代码是为第二个条件的判断做准备 
	}
	//上面这个大for循环主要是做准备。因为没办法直接判断 
	
	
	if(now2!=0){//如果没有不在范围内的,那么第二条件符合,赋值1否则0 
		dier=1;
	}
	else 
	    dier=0;
	//以上5行判断第二条件
	
	 
	if(xiaoxie+daxie+shuzi+zifu>3){//如果满足第三个条件同理,这4个变量相加>3那就说明一定符合 
		disan=1;
	}
	else
	    disan=0;
	//以上5行判断第三个条件  
	    
	
	if(diyi==1&&dier==1&&disan==1){//如果3个条件全部正确 
		return true;//这个字符串是对的 
	}
	return false;//否则是错的 
}
int main(){
	string s,noww;
	cin>>s;//读入整个 
    for(int i=0;i<s.size();i++){
		while(s[i]!=','){//当不断开的时候拼接给noww 
			noww+=s[i];
			i++;
		}
		if(iszheng(noww))//如果是正确的就输出 
			cout<<noww<<endl;
		noww="";//判断完后清空 
	}
}
2025/1/5 22:12
加载中...