啊,我终于明白了。感谢 user4581301 告诉我一个字符串已经是一个字符数组。这个提示给了我如何解决问题的想法。
我实际上设法完全摆脱了新数组,而是搜索字符串。
我可以完全摆脱 char passwordHolder[password.length()]; 而不是它。
我最初的计划是搜索 passwordHolder 数组:
for (int i = 0; i < password.length(); i++){
if (isupper(passwordHolder[i])){
hasUpper= true;
}
if (islower(passwordHolder[i])){
hasLower= true;
}
if (isdigit(passwordHolder[i])){
hasDigit = true;
}
}
if (hasLower == true && hasUpper == true && hasDigit == true)
return 1;
但鉴于我不再需要 passwordHolder 数组,我可以改为使用 password 作为数组并执行以下操作:
for (int i = 0; i < password.length(); i++) {
if (isupper(password[i]))
hasUpper = true;
else if (islower(password[i]))
hasLower = true;
else if (isdigit(password[i]))
hasDigit = true;
}
if (hasLower == true && hasUpper == true && hasDigit == true)
return 1;
感谢评论的人。我已经被困在这个问题上 3 个小时了,哈哈。
如果您对此任务也有疑问,我的完整解决方案在这里。可能仍然很邋遢,但它有效:
#include <iostream>
#include <string>
using namespace std;
string password = "";
string confirmPassword = "";
bool hasDigit = false;
bool hasUpper = false;
bool hasLower = false;
int x = 0;
int confirm(string password, bool hasUpper, bool hasLower, bool hasDigit)
{
for (int i = 0; i < password.length(); i++) {
if (isupper(password[i]))
hasUpper = true;
else if (islower(password[i]))
hasLower = true;
else if (isdigit(password[i]))
hasDigit = true;
}
if (hasLower == true && hasUpper == true && hasDigit == true)
return 1;
}
int main(string password, bool hasUpper, bool hasLower, bool hasDigit) {
Start:
cout << "please enter your password: ";
cin >> password;
cout << "please confirm your password: ";
cin >> confirmPassword;
while (password != confirmPassword || password.length() < 8) {
cout << "Passwords do not match. Please enter your password again: ";
cin >> password;
cout << "Please confirm your password: ";
cin >> confirmPassword;
}
x = confirm(password, hasUpper, hasLower, hasDigit);
if (x == 1) {
cout << "You have a good password";
}
else {
cout << "You should have a password with 8 characters or more, a Capital letter, lowercase letter, and a number. Try again. \n";
goto Start;
}
}