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;
}
}
}
浙公网安备 33010602011771号