测试字符串或字符用于大写,小写和数字C ++

时间:2014-05-07 09:07:24

标签: c++ if-statement boolean boolean-logic

我正在尝试练习,我让用户写了一个传球,我必须检查传球长度(必须至少6个字符),大写,小写和至少1个数字。出于某种原因,当我尝试使其工作时,它不会检测到大写和小写。即使“lower”或“upper”= = true,它仍会进入嵌套的if(!lower)或if(!upper)条件,并在另一个为false时运行该代码块。

谁能告诉我逻辑错在哪里?我不明白为什么如果将bool变量设置为true,它甚至会使用if来访问if。

 bool verified(const char *pass)
 {
     int length = strlen(pass);
     bool lower, upper, number;
     lower = hasLower(pass);
     upper = hasUpper(pass);
     number = hasNumber(pass);
     if (length < 6)
     {
         cout << "INVALID: Your pass does not contain enough characters";
         return false;
     }
     else
     {
         if (lower && upper && number)
         {
             cout << "Your pass is valid and verified. Congrats!";
             return true;
         }
         if (!lower)
         {
             if (!number)
             {
                 cout << "INVALID: Your pass does not contain lower case letters or at least 1 number";
                 return false;
             }
             if (!upper);
             {
                 cout << "INVALID: Your pass does not contain lower case or upper case letters";
                 return false;
             }
             cout << "INVALID: Your pass does not contain lower case letters";
             return false;
         }
         if (!upper);
         {
             if (!number)
             {
                 cout << "INVALID: Your pass does not contain upper case letters or at least 1 number";
                 return false;
             }
             if (!lower);
             {
                cout << "INVALID: Your pass does not contain upper case or lower case letters"1;
                return false;
             }
             cout << "INVALID: Your pass does not contain upper case letters";
             return false;
         }
         if (!number)
         {
             cout << "INVALID: Your pass does not contain at least 1 number";
             return false;
         }
     }
 }

检查大写的方法

 bool hasUpper(const char *pass)
 {
     bool upper;
     for (int i = 0; i < strlen(pass); i++)
     {
         upper = isupper(pass[i]);
         if (upper == true)
         {
             return true;
             break;
         }
     }
     return false;
 }

检查小写的方法

 bool hasLower(const char *pass)
 {
     bool lower;
     for (int i = 0; i < strlen(pass); i++)
     {
         lower = islower(pass[i]);
         if (lower == true)
         {
             return true;
             break;
         }
     }
     return false;
 }

检查号码的方法

 bool hasNumber(string pass)
 {
     if (pass.find('0') != string::npos ||
         pass.find('1') != string::npos ||
         pass.find('2') != string::npos || 
         pass.find('3') != string::npos || 
         pass.find('4') != string::npos || 
         pass.find('5') != string::npos || 
         pass.find('6') != string::npos ||
         pass.find('7') != string::npos || 
         pass.find('8') != string::npos ||
         pass.find('9') != string::npos)
         return true;
     else
         return false;
 }

1 个答案:

答案 0 :(得分:1)

你写过:

  

if (!upper) *;*

你看到;之后?

事实上,您已在代码中的多个位置完成此操作。