题目描述 本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。
输入格式: 输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
输出格式: 对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
如果密码合法,输出Your password is wan mei.; 如果密码太短,不论合法与否,都输出Your password is tai duan le.; 如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.; 如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.; 如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.。 输入样例:
5 123s zheshi.wodepw 1234.5678 WanMei23333 pass*word.6输出样例:
Your password is tai duan le. Your password needs shu zi. Your password needs zi mu. Your password is wan mei. Your password is tai luan le.网搜了一下别人的代码,了解了一个新的头文件 cctype,可以直接调用来判断一个字符变量是否是数字字母,还是蛮方便的,就是太难记了,用的时候怕想不起来。用法如下
isalpha() 如果参数是字母,该函数返回true isdigit() 如果参数是数字(0~9),该函数返回true isalnum()如果参数是字母数字,即字母或数字,该函数返回true
还有好多,只挑了几个我感觉比较常用的 改进代码如下
#include<iostream> #include<cctype> using namespace std; int main(){ int n; cin >> n; getchar(); string s; while(n--){ getline(cin, s); if(s.length()<6)cout << "Your password is tai duan le.\n"; else{ int haszimu=0, hasshuzi=0, buhefa=0; for(int i=0; i<s.length(); i++){ if(!isalnum(s[i])&&s[i]!='.') buhefa = 1; if(isalpha(s[i])) haszimu = 1; if(isdigit(s[i])) hasshuzi = 1; } if(buhefa == 1) cout << "Your password is tai luan le.\n"; else if(hasshuzi == 0) cout << "Your password needs shu zi.\n"; else if(haszimu == 0) cout << "Your password needs zi mu.\n"; else cout << "Your password is wan mei.\n"; } } }