1081 检查密码 (15 point(s)) (测试点二)

卡了下测试点二,想了想应该都完成了题目给出五个判断条件的,所以应该跟这五个条件没什么关系。但是又没想出 string 有什么边界问题。所以直接参考了别人的文章。

原来是字符串中可能包含空格的问题,题目关于字符串的描述是 “每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束” 并没有说字符串具体有什么字符,所以是可能包含空格的。

所以需要用 getline() 将字符串整行读取。之前似乎也说过,对于这种整行的字符串用 getline() 读取比较保险,除非题目明确没有空格。

参考

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

int main() {
	int n;
	cin >> n;
	getchar();
	while(n--){
		bool unlegal = false, hasNum = false, hasAl = false;
		string pass;
		getline(cin, pass);
		
		// 判断长度
		if(pass.size() < 6) {cout << "Your password is tai duan le." << endl; continue;}
		
		// 判断内容
		for(auto p: pass){
			// 非法字符 
			if(isalnum(p) == false && p != '.')
				{cout << "Your password is tai luan le." << endl; unlegal = true; break;}
			if(isdigit(p)) hasNum = true;
			if(isalpha(p)) hasAl = true;
		} 
		
		// 内容合法 
		if(unlegal == false){
			// 没有数字
			if(hasNum == false)  {cout << "Your password needs shu zi." << endl; continue;}
			// 没有字母
			if(hasAl == false)  {cout << "Your password needs zi mu." << endl; continue;}
			
			// 没有任何问题
			cout <<  "Your password is wan mei." << endl;
		}
	}
}

posted on 2021-09-16 22:34  Atl212  阅读(107)  评论(0)    收藏  举报

导航