1. 程式人生 > >密碼問題(函式、字串、指標)(航電2043題改版)(c++)

密碼問題(函式、字串、指標)(航電2043題改版)(c++)

【問題描述】
假設一個比較安全的密碼至少應該滿足下面兩個條件:
(1)密碼長度大於等於8,且不要超過16。
(2)密碼中的字元應該來自下面“字元類別”中四組中的至少三組。
這四個字元類別分別為:
1.大寫字母:A,B,C…Z;
2.小寫字母:a,b,c…z;
3.數字:0,1,2…9;
4.特殊符號:~,!,@,#,$,%,^;
給你一個密碼,你的任務就是判斷它是不是一個安全的密碼。
請設計函式bool Password(char *str)實現之。

【輸入形式】
測試例項包含一個密碼(長度最大為50),密碼僅包括上面的四類字元。

【輸出形式】
對於測試例項,判斷這個密碼是不是一個安全的密碼,是的話輸出YES,否則輸出NO。

【樣例輸入】
a1b2c3d4

【樣例輸出】
NO

題目難點

  1. 密碼長度要控制在8到16位,可是密碼又是使用者輸入的。若想知道一個輸入的字串長度,我們可以使用一個新的函式strlen(),這個函式在標頭檔案#include 中定義,當然你也可以自己編寫實現這個函式的功能,見“補充”部分
  2. strlen()的功能:是一個計數器,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃描,直到碰到第一個字串結束符’\0’為止,然後返回計數器值(長度不包含’\0’)。 知道了其功能,所以我們初始給陣列分棧的時候要把記憶體全部初始化為’\0’
  3. 用ASCII碼來判斷陣列每個單元格記憶體儲的字元符不符合標準

程式碼1

#include <iostream>
#include <cstring>
using namespace std;
bool Password(char *str);//宣告 bool型函式,其引數是字元型指標,
                         //其與bool Password(char str[]);在功能上是一致的
int main()
{
	char s[50]="";//測試密碼長度最大為 50,且這個空串初始化在“筆記”板塊會詳講
    cin>>s;
    int len = strlen(s);//算長度
    if
( len>=8 && len<=16 )//判斷長度知否符合規定 { if(Password(s))//符合題意 cout<<"YES"<<endl; else//不符合題意 cout<<"NO"<<endl; } else//字元數不在範圍內的 cout<<"NO"<<endl; return 0; } bool Password(char *str) { int a=0,b=0,c=0,d=0; for(int j=0;str[j];j++)//也是用結束符號'\0'來判斷迴圈體 { if( str[j]<='z' && str[j]>='a' ) a=1;//只要陣列中有一個字元滿足是小寫字母的要求就把a賦值為1 if( str[j]<='Z' && str[j]>='A') b=1;//大寫字母同理 if( str[j]<='9' && str[j]>='0') c=1;//數字同理 if( str[j]=='~' || str[j]=='!' || str[j]=='@' || str[j]=='#' || str[j]=='$' || str[j]=='%' || str[j]=='^' ) d=1; }//特殊符號同理 if( a+b+c+d >= 3 ) return 1;//即如果四者中滿足三者就返回真值1 return 0; }

筆記

  1. 把字元型陣列初始化為空串的三種方法:
    (1) char str[10] = “”;
    (2) char str[10] = { ‘\0’ };
    (3) char str[10]; str[0] = ‘\0’;
  2. 字元陣列初始化:
    (1) char str[6] = { ‘C’, ‘h’, ‘i’, ‘n’, ‘a’, ‘\0’ };
    (2) char str[6] = {“China”};
    (3) char str[6] = “China”;

補充拷貝程式碼:

#include <iostream>
using namespace std;
void mystrcpy(char *dest, const char *source);//函式宣告
int main()
{
    //......
}

void mystrcpy(char *dest, const char *source)//拷貝函式定義
{
    while( *dest++ = *source++);
}