2017-02-27 83 views
-1

因此,我目前正在研究一個項目,該項目需要我從用戶那裏獲取數組的單詞,然後讓他們搜索數組中的單詞。程序必須顯示數組中單詞的位置。以下是我所做的:如何搜索字符二維數組中的單詞?

#include <iostream.h> 
#include <conio.h> 

main() 
{ 
char studentsList[30][20]; 
int size, flag = 0, pos; 
cout << "Enter the size of the array: "; 
cin >> size; 
cout << "Enter yhe names of the students: \n"; 
for(int i = 0; i < size; i++) 
{ 
    cout << "Student no. " << i + 1 << ": "; 
    cin >> studentsList[i]; 
} 
for(int m = 0; m < size; m++) 
{ 
    cout << studentsList[m] << "\t"; 
} 
char searchName[20]; 
cout << "type the name you need to search: "; 
cin >> searchName; 
for(i = 0; i < size; i++) 
{ 
    if(studentsList[i] == searchName) 
    { 
    flag = 1; 
    pos = i + 1; 
    } 
} 
if(flag == 0) 
    cout << "Term not found."; 
else 
    cout << "Term found at position " << pos; 
getch(); 
} 

我無法捕捉代碼中的錯誤。它總是將輸出作爲'未找到期限'。幫助將不勝感激!

+1

這不是C++。由於幾個原因,它不會編譯。在修復代碼以便編譯代碼時,可以藉助調試器輕鬆解決問題。 – mpiatek

+4

請參閱[本文](http://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings-in-c)瞭解如何比較C字符串。請注意,如果你使用'std :: string',你的生活會更容易。 – Rakete1111

+0

您使用的頭文件都不是標準C++的一部分。無論你從哪裏學習這些東西,都要從其他地方學習。 –

回答

-2

我認爲問題在於您使用平等檢查的方式。

它是if(studentsList[i] == searchName)

的==在比較存儲器地址。 相反,由於您使用的是char [],因此最好使用實用函數來檢查char的等於char。

bool arrcmp(unsigned char arr1[], unsigned char arr2[]) { 
    int i = 0; 
    int match = 0; 

    if(strlen(arr1) != strlen(arr2)) { 
     return false; 
    } 
    for(i=0; i < strlen(arr1); ++i) { 
     if(arr1[i] != arr2[i]){ 
      match = 1; 
      break; 
     } 
    } 
    return match==0; 
} 
+0

這不會編譯。你可能意思是'bool arrcmp'。但是不要重新發明輪子 - 他可以使用'std :: strncmp'或'std :: string'&std :: find' – mpiatek

+0

另外你的實現是完全錯誤的 - 當字符串短於8時會發生什麼?如果他們的時間更長,但第9個角色開始差異會發生什麼? – mpiatek

+0

感謝您的意見,只是修復它,對不起,我寫得很快:) –