本題要求你幫助某網站的用戶註冊模塊寫一個密碼合法性檢查的小功能。該網站要求用戶設置的密碼必須由不少於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.
==================================================================================================
思路:(話說又出新題了啊233)
使用C++的STL很方便。這題第三個測試點有個坑:題目沒說密碼不含空格!
所以要用getline,注意用getchar吃掉n後的空格。
(本來還想這題會不會在像“.......”這種密碼上有坑,然而應該沒有,不過代碼還是考慮了這點)
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <sstream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#define INF 999999999
#define MAXN 105
using namespace std;
int main()
{
int n,i,len;
string str;
cin>>n;
getchar();
while(n--)
{
str.clear();
bool dig=false,alp=false,luan=false;
getline(cin,str);
len = str.size();
if(len < 6)
cout<<"Your password is tai duan le."<<endl;
else
{
for(i=0;i<len;++i)
{
if(isdigit(str[i]))
dig = true;
else if(isalpha(str[i]))
alp = true;
else
{
if(str[i] != '.')
luan = true;
}
}
if(luan == true)
cout<<"Your password is tai luan le."<<endl;
else
{
if(alp==true)
{
if(dig == true)
cout<<"Your password is wan mei."<<endl;
else
cout<<"Your password needs shu zi."<<endl;
}
else
{
if(dig == false)
{
cout<<"Your password needs zi mu."<<endl;
cout<<"Your password needs shu zi."<<endl;
}
else
cout<<"Your password needs zi mu."<<endl;
}
}
}
}
return 0;
}