描述
????????小明同學最近開發了一個網站,在用戶注冊賬戶的時候,需要設置賬戶的密碼,為了加強賬戶的安全性,小明對密碼強度有一定要求:
????????1.?密碼只能由大寫字母,小寫字母,數字構成;
????????2.?密碼不能以數字開頭;
????????3.?密碼中至少出現大寫字母,小寫字母和數字這三種字符類型中的兩種;
????????4.?密碼長度至少為8
????????現在小明受到了n個密碼,他想請你寫程序判斷這些密碼中哪些是合適的,哪些是不合法的。
輸入描述
????????輸入一個數n,接下來有n(n≤100)行,每行一個字符串,表示一個密碼,輸入保證字符串中只出現大寫字母,小寫字母和數字,字符串長度不超過100。
輸出描述
????????輸入n行,如果密碼合法,輸出YES,不合法輸出NO。
示例
輸入:1
???????????CdKfIfsiBgohWsydFYlMVRrGUpMALbmygeXdNpTmWkfyiZIKPtiflcgppuR
輸出:YES
? ? ? ? 分析:先對密碼第一個字符和密碼長度進行判斷,若不合法,直接判斷下一個密碼,再對密碼這個字符串進行遍歷,分別求各種字符的個數,如果輸入的字符不在字母大小寫和數字范圍內,則不合法,直接判斷下一個密碼,最后判斷小寫字母、大寫字母和數字三類中有幾類。
? ? ? ? C語言
#include <stdio.h>
#include<string.h>
int main() {
? ? int n;
? ? scanf("%d",&n);
? ? for(int i=1;i<=n;i++)
? ? {
? ? ? ? ?char str[101]={0};
? ? ? ? scanf("%s",str);
? ? ? ? if(strlen(str)<8)
? ? ? ? {
? ? ? ? ? ? printf("NO\n");
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? if(str[0]>='0'&&str[0]<='9')
? ? ? ? {
? ? ? ? ? ? printf("NO\n");
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? //分別記錄小寫字母、大寫字母、數字和其他字符的個數
? ? ? ? int character=0,CHAR=0,num=0,other=0;
? ? ? ? for(int j=0;str[j]!='\0';j++)
? ? ? ? {
? ? ? ? ? ? if(str[j]>='a'&&str[j]<='z') character++;
? ? ? ? ? ? else if(str[j]>='A'&&str[j]<='Z') CHAR++;
? ? ? ? ? ? else if(str[j]>='0'&&str[j]<='9') num++;
? ? ? ? ? ? else other++;
? ? ? ? }
? ? ? ? if(other!=0)
? ? ? ? {
? ? ? ? ? ? printf("NO\n");
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? //三種字符出現少于兩種
? ? ? ? if((character>0)+(CHAR>0)+(num>0)<2)
? ? ? ? {
? ? ? ? ? ? printf("NO\n");
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? printf("YES\n");
? ? } ?
? ? return 0;
}
? ? ? ? Java
import java.util.Scanner;
public class Main {
? ? public static void main(String[] args) {
? ? ? ? ????????Scanner in = new Scanner(System.in);
? ? ? ? ????????int n=in.nextInt();
? ? ? ????????? in.nextLine();
? ? ? ????????? for(int i=1;i<=n;i++)
? ? ? ? ????????{
? ? ? ? ? ? ????????String str=in.nextLine();
? ? ? ? ? ? ????????char[] ch=str.toCharArray();
? ? ? ? ? ????????? if(ch.length<8)
? ? ? ? ? ? ????????{
? ? ? ? ? ? ????????System.out.println("NO");
? ? ? ? ? ? ????????continue;
? ? ? ? ? ? ????????}
? ? ? ? ? ? ????????if(ch[0]>='0'&&ch[0]<='9')
? ? ? ? ? ????????? {
? ? ? ? ? ? ? ? ????????System.out.println("NO");
? ? ? ? ? ? ? ? ????????continue;
? ? ? ? ? ????????? }
? ? ? ? ? ? ? ? ? ??//分別記錄小寫字母、大寫字母、數字和其他字符的個數
? ? ? ? ????????????int character=0,CHAR=0,num=0,other=0;
? ? ? ? ? ? ? ? ? ? for(int j=0;j<ch.length;j++)
? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ????????????????if(ch[j]>='a'&&ch[j]<='z') character++;
? ? ? ? ? ????????????????? else if(ch[j]>='A'&&ch[j]<='Z') CHAR++;
? ? ? ? ? ????????? ????????else if(ch[j]>='0'&&ch[j]<='9') num++;
? ? ? ? ? ? ????????????????else other++;
? ? ? ? ? ? ? ? ? ?}
? ? ? ?????????? ? if(other!=0)
? ? ? ? ? ? ? ? ?? {
? ? ? ? ? ? ????????????????System.out.println("NO");
? ? ? ? ? ? ????????????????continue;
? ? ? ?????????? ? }
? ? ? ? ? ? ? ? ? ?//字符類型個數
? ? ? ? ? ? ? ? ? ?int count=0;
? ? ? ?????????? ? if(character>0){
? ? ? ? ? ? ????????????????count++;
? ? ? ?????????? ? }
? ? ? ? ? ? ? ? ? ?if(CHAR>0){
? ? ? ? ? ? ?????????????????count++;
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ?if(num>0){
? ? ? ? ? ? ????????????????count++;
? ? ? ?????????? ? }
? ? ? ? ? ? ? ? ? ?if(count<2){
? ? ? ? ? ? ???????????????System.out.println("NO");
? ? ? ? ? ? ????????????????continue;
? ? ? ? ???????????}
? ? ? ? ? ? ? ? ? ?System.out.println("YES");
? ? ? ? ? ?? } ?
? ? ?}
}