2017-07-09 8 views
-2

/* このコードのエラーは何ですか? 文字列がリストに含まれていても、私は常にfalse(0)になります。ロジックは上記の質問に対して正しいですか? */文字列と単語のリストSがリストに存在するかどうかを確認

#include <iostream> 
using namespace std; 

bool ispresent(char (*stringlist)[100] , char *arr){ 
    for (int i = 0 ; i < 7 ; i++){ 
     if (stringlist[i] == arr){ 
      return true; 
     } 
    } 
    return false; 
} 

int main(){ 
//given a list of strings 
char stringlist[7][100] ={ 

    "He", 
    "is", 
    "very", 
    "bad", 
    "instead", 
    "do", 
    "yourself" 
}; 

//input word to check 
char arr[50]; 
cin.getline(arr , 50 , '\n'); 

//check if word is present or not 
bool found = ispresent(stringlist , arr) ; 
cout << found; 
return 0; 
} 
+2

'strcmp'または'のstd :: STRING'を使用し、あなたが –

+2

今のポインタを比較している、(HTTP [実際のC++を使用]:// ideoneを。 com/DviRFq)であり、 'C'コードではありません。あなたのロジックに関しては、ロジックには何も問題はありません.C++のイディオム*を使用する場合は*によく合います。 – PaulMcKenzie

答えて

1

あなたは代わりに==の文字列比較関数を使用する必要があります。文字列では機能しません。例:

strcmp(stringlist[i], arr) 

とは比較演算子ではないポインタに対してプリミティブの変数に取り組んでいますstring.hの ライブラリが含まれています。他の型のデータを表すポインタを使用する場合、==演算子は参照を比較するだけで、参照するものではなく、独自のメソッド/関数を実装する必要があります(ライブラリによって提供されるメソッド/関数を使用する必要があります)。

0

あなたは常にC文字列の一つの要素を比較します==演算子を使用して代わりにしているので、あなたは常にfalseを取得(STRINGLIST [i]を== ARR)

理由がある場合文字列全体の一部。 string::find()はその仕事をしています。

可能であれば、std :: stringを使用してメモリを割り当てる/割り当てを解除する必要はありません。 std :: stringにはstr.find(str1)関数があり、str1がstrで見つかった最初のインデックスを出力します。あなたはこの方法でそれを使用することができます

情報string::nposについて: cplusplus.comから:

静的定数size_t型のNPO = -1; ストリングのメンバ関数で
size_tの

の最大値LEN(又はsublen)の値として使用されるこの値は、パラメーター、「文字列の終わりまで」を意味します。

戻り値として、通常は一致しないことを示すために使用されます。

この定数は-1の値で定義されます。これは、size_tが>符号なし整数型であるため、この型に対して可能な表現可能な最大値です。

これは動作するはずです:いっそ

#include <iostream> 
#include <string> 

// str is the string array 
// str_size is the size of the array passed to the funcion 
// str 1 is the string you are looking for. 

bool ispresent(std::string str[], int str_size, std::string str1); 

int main() 
{ 
    const int SIZE = 4; 
    std::string str0[SIZE]; 

    std::cout << "Enter four strings:\n"; 

    for (int i = 0; i < 4; i++) 
     std::cin >> (str0)[i]; 

    std::string search_term; 

    std::cout << "Enter a search term:"; 

    std::cin >> search_term; 

    bool result = ispresent(str0, SIZE, search_term); 

    // If output is 1 then it was found 
    std::cout << result; 

    return 0; 
} 

bool ispresent(std::string str[], int str_size, std::string str1) 
{ 
    for (int i = 0; i < str_size; i++) 
    { 
     // Use the find function in string on each element of the array. 
     if (str[i].find(str1) != std::string::npos) 
      return true; // Return true if found 
    } 

    // String not found 
    return false; 
} 
関連する問題