簡體   English   中英

需要幫助將數組元素/信息傳遞給函數C ++

[英]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的調用方式,因為它接受字符值而不是指向字符串的指針。 為此,您將需要遍歷forwhile循環中的字符串,並分別檢查每個字符。 您嘗試將指針返回為布爾值,這將無法正常工作。 這樣的事情會:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM