题目地址:PAT1081.检查密码(15)
题目介绍:
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点".",还必须既有字母也有数字。输入第一行给出一个正整数 N(<=100),随后 N 行,每行给出一个用户设置的密码,为不超过80个字符的非空字符串,以回车结束。
易错分析:
1. 在判断字母的时候大小写都要判断。
2. 在输入密码的时候,不能用scanf或者cin,因为这两者都会略过空格等任何空白字符。
程序:
#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
int isAlpha(char ch)
{
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}
int isNumber(char x)
{
return x >= '0' && x <= '9';
}
int isPoint(char x)
{
return x == '.';
}
int main(int argc, char const *argv[])
{
int N;
cin >> N;
char ch[85];
getchar(); // 挡回车
while (N--)
{ /* 判断是否有字母 数字 小数点的flag,1表示存在 */
int flagAlpha = 0, flagNum = 0, flagLegal = 0;
gets(ch); // 不能用scanf或者cin,因为会跳过空格
int len = strlen(ch);
if (len < 6)
cout << "Your password is tai duan le." << endl;
else
{
for (int i = 0; i < len; i++)
{ /* 判断每个字符是不是都是合法的 */
if (isNumber(ch[i]) || isAlpha(ch[i]) || isPoint(ch[i]))
{
if (isNumber(ch[i]))
flagNum = 1;
if (isAlpha(ch[i]))
flagAlpha = 1;
}
else /* 如果出现不合法的字符 */
{
flagLegal = 1;
break; // 退出
}
}
if (flagLegal)
cout << "Your password is tai luan le." << endl;
else if (flagAlpha && !flagNum) /* 如果只有字母没有数字 */
cout << "Your password needs shu zi." << endl;
else if (flagNum && !flagAlpha) /* 如果只有数字没有字母 */
cout << "Your password needs zi mu." << endl;
else if (flagAlpha && flagNum) /* 长度符合字母数字都有 */
cout << "Your password is wan mei." << endl;
}
}
return 0;
}
本文介绍了一个用于检查网站用户注册时所设密码合法性的程序实现。该程序确保密码至少包含6个字符,且同时含有字母和数字,只允许使用英文字母、数字及小数点。通过逐个字符的检查来验证密码是否符合要求。
771

被折叠的 条评论
为什么被折叠?



