2014-12-08 95 views
1

我正在學習C++,並且在使用/寫入函數時遇到了一些麻煩。需要幫助將數組元素/信息傳遞給函數C++

現在我正在嘗試驗證用戶提供的密碼的問題。

的要求是:

1大寫字母 1小寫字母 1號 至少6個字符

每個需求量的是指通過從主傳遞()來的函數來驗證。

我爲小寫字母寫了一個函數,我不斷收到錯誤消息,說有一個無法解析的外部錯誤。但是,當我將main_user_password傳遞給length函數時,它會返回正確的語句。

這是我不斷收到在Visual Studio中的錯誤:

錯誤3錯誤LNK2019:無法解析的外部符號 「布爾__cdecl小寫字母(char * const的)」(小寫@@ YA_NQAD @ Z?)在函數_main引用

錯誤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; 
} 
+0

使用std ::向量或std ::數組,而不是原始陣列 – Borgleader 2014-12-08 03:04:50

+0

使用'的std :: string'代替字符數組的字符串和您的問題傳遞字符串爲數組消失。 – 2014-12-08 03:05:04

+0

看看你如何在頂部聲明'lowercase()'函數,以及如何在底部定義相同的函數。他們應該有相同類型的參數,但他們是不同的。 – Galik 2014-12-08 03:08:59

回答

2

這是因爲signat函數定義中的URI與聲明中的簽名不匹配。

bool lowercase(char[]); 

bool lowercase(char password2) // OOPS! Doesn't match. 
{ 
    .... 
} 

應該

bool lowercase(char password2[]) 
{ 
    .... 
} 

你真的應該請使用std::string或至少是由const char指針傳遞。通過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; 
} 
+0

嘗試了你的建議。收到以下錯誤警告警告C4800:'char []':將值強制爲bool'true'或'false'(性能警告)錯誤錯誤C2664:'int islower(int)':無法轉換參數1從'char []'到'int'\t 智能感知:類型爲「char *」的參數與類型爲「int」的參數不兼容 – TPC4589 2014-12-08 03:11:20

+0

@ TPC4589即使超出了實際問題的範圍,包括一個更新,指出您的代碼和示例解決方案的其他問題。 – 2014-12-08 03:17:59

+0

我們還沒有學過std :: string,所以我不確定如何使用它,但我會研究它 – TPC4589 2014-12-08 03:20:02