題目描述:
本題要求你幫助某網站的用戶註冊模塊寫一個密碼合法性檢查的小功能。該網站要求用戶設置的密碼必須由不少於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.
注意:
題目15分,難度不大,但需要注意一點:題目說的是非空字符串,但是並不能保證中間有無空格。因此,在輸入時如果用cin輸入的話,最終的結果不能完全正確,那就是漏掉了輸入含有空格的情況,因此使用getline(cin,str)來輸入,這樣空格也能讀入。getchar()的作用是讀入輸入n之後的換行符,否則換行符會讀進getline()中。
AC代碼(時間:3ms):
#include<iostream>
#include<cstring>
using namespace std;
int not_leagl_char(string str,int n)//包含非法字符
{
int flag = 0,k=0;
for(int i =0 ;i<n;i++)
{
if((str[i]>='0'&&str[i]<='9')||(str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z') || str[i] == '.')
{
k++;
}
}
if(k!=n)
{
flag = 1;
}
return flag;
}
int no_number(string str,int n)//沒有數字
{
int flag = 1;
for(int i = 0;i<n;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
flag = 0;
break;
}
}
return flag;
}
int no_case(string str,int n)//沒有字母
{
int flag = 1;
for(int i=0;i<n;i++)
{
if((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z'))
{
flag = 0;
break;
}
}
return flag;
}
int main()
{
int n;
string str;
cin >> n;
getchar();//讀取換行
for(int i=0;i<n;i++)
{
getline(cin,str);
int len = str.length();
if(str.length()<6)
{
cout<<"Your password is tai duan le."<<endl;
}
else if(not_leagl_char(str,len))
{
cout<<"Your password is tai luan le."<<endl;
}
else if(no_number(str,len))
{
cout<<"Your password needs shu zi."<<endl;
}
else if(no_case(str,len))
{
cout<<"Your password needs zi mu."<<endl;
}
else
{
cout<<"Your password is wan mei."<<endl;
}
}
return 0;
}