[英]Need help passing arrays elements/info to functions C++
我正在學習C ++,使用/編寫函數時遇到了一些麻煩。
目前,我正在嘗試驗證用戶提供的密碼的問題。
要求是:
1個大寫字母1個小寫字母1個數字,至少6個字符
每個需求都應通過從main()傳遞給函數來進行驗證。
我為小寫字母寫了一個函數,並且不斷收到錯誤消息,指出存在未解決的外部錯誤。 但是,當我將user_password從main傳遞給length函數時,它將返回正確的語句。
這是我一直在Visual Studio中遇到的錯誤:
錯誤3錯誤LNK2019:函數_main中引用的未解析的外部符號“布爾__cdecl小寫(char * const)”(?lowercase @@ YA_NQAD @ Z)
錯誤4錯誤LNK1120:1個未解決的外部
這是我到目前為止編寫的代碼
#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;
bool length(char[]);
bool lowercase(char[]);
int main()
{
const int SIZE = 20;
char user_password[SIZE];
cout << "Please enter a password" << endl;
cout << "**********************************************" << endl;
cout << "Must contain at least 1 upper case letter" << endl;
cout << "Must contain at least 1 lower case letter" << endl;
cout << "Must contain at least 1 number" << endl;
cout << "**********************************************" << endl;
cin.getline(user_password, SIZE);
length(user_password);
lowercase(user_password);
return 0;
}
bool length(char password1[])
{
int length;
length = strlen(password1);
if (length < 6)
{
cout << "Password needs at least 6 characters" << endl;
}
else if (length < 6)
{
cout << "Character requirements met" << endl;
}
return password1;
}
bool lowercase(char password2)
{
if (!islower(password2))
{
cout << "Password requires at least 1 lower letter" << endl;
}
else if (islower(password2))
{
cout << "Lower case letter requirement met" << endl;
}
return password2;
}
這是因為函數定義上的簽名與聲明上的簽名不匹配。
bool lowercase(char[]);
bool lowercase(char password2) // OOPS! Doesn't match.
{
....
}
應該
bool lowercase(char password2[])
{
....
}
您實際上應該使用std::string
或至少使用const char
指針傳遞。 通過將const
指針傳遞const
空終止的字符串傳遞指針,可以更容易識別。
bool lowercase(const char* password2)
無論哪種方式,您都將需要更改islower
的調用方式,因為它接受字符值而不是指向字符串的指針。 為此,您將需要遍歷for
或while
循環中的字符串,並分別檢查每個字符。 您嘗試將指針返回為布爾值,這將無法正常工作。 這樣的事情會:
bool lowercase(char password2[])
{
for (const char*ptr = password2; *ptr; ++ptr)
{
if (!islower(*ptr))
{
cout << "Password requires at least 1 lower letter" << endl;
return false;
}
}
cout << "Lower case letter requirement met" << endl;
return true;
}
如評論中所述,您對length
的實現也很重要。 您不僅要檢查兩次相同的長度,而且還要嘗試將指針作為布爾值返回。
bool lowercase(char password2[])
{
unsigned int notlower = 0;
for (const char*ptr = password2; *ptr; ++ptr)
{
if (!islower(*ptr))
{
notlower++;
}
}
if (notlower == strlen(password2))
{
cout << "Password requires at least 1 lower letter" << endl;
return false;
}
cout << "Lower case letter requirement met" << endl;
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.