2012-04-29 3 views
0
と条件

可能性の重複: "!はい、それは動作します"
How do I properly compare strings in C?シンプルであれば、文字列

#include <iostream> 
using namespace std; 

int main(){ 

    char name[100]; 
    cout<<"Enter: "; 
    cin>>name; 
    if(name == "hello"){ 
     cout<<"Yes it works!"; 
    } 

    return 0; 
} 

なぜ私は私が得たdidntのプロンプトでハローに入ったときメッセージ?

+2

'name'は文字列ではないので、文字配列です。 –

+3

'std :: string'を使用してください!そのコードはバッファオーバーフローに対して脆弱です。実際にC++を使用している場合は、STLクラスを使用して起動します。 – mfontanini

答えて

9

同等性をテストするには、strcmpを使用する必要があります。

nameは配列であり、std::stringではなく、helloは文字列リテラルです(const char*)。文字列ではなくポインタを比較しています。

+0

'strcmp'は等しい場合は0を返しますので、' if(strcmp(name、 "hello"))を使用して比較しないでください。 – chris

+0

はい。しかし今、私たちはOPに、C++では 'name'は文字列ではないが、C言語の文字列であると言いましょう。比較はまだ失敗します。それをどうやってやっていくのだろう? –

+0

あなたが必要とするのは、余分な '; else'です。 –

4

はこれを試してみてください:

#include <string.h> 
#include <iostream> 
using namespace std; 

int main(){ 

    char name[100]; 
    cout<<"Enter: "; 
    cin>>name; 

    if(strcmp(name, "hello") == 0) { 
     cout << "Yes it works!"; 
    } 

    return 0; 
} 
+1

特に、エラー処理なしの状況で、Cスタイルの方法論を使用することを奨励しません。*誰かが100文字の入力をした場合どうなりますか?*また、私は、レガシーCヘッダを使用するには '#include 'でなければならず '#include ' ...でなければなりませんが、私が信じられているように、 :http://stackoverflow.com/questions/8380805/difference-between-string-h-and-cstring – HostileFork

+0

あなたは正しいです。 Bo Perssonsの答えを読んだ後、私はむしろ彼のソリューションをお勧めしたいと思います。 – Pedro

1

あなたはおそらく他の言語から期待してきたハイレベルな振る舞いを持っていない低レベルの文字列(「C文字列」)があります。あなたは、文字列のこれらのタイプの一つ作成している(「引用符」の)文字列リテラルを入力すると:C++で

http://en.wikipedia.org/wiki/C_string_handling

を、人々が行う最初のものの一つは、にその低レベルの文字列を渡していますstd::stringのコンストラクタを使用して、慣れ親しんだインタフェースの便利性をより多く持つクラスのインスタンスを作成します。

http://www.cplusplus.com/reference/string/string/

C++は非常にC-ような基盤の上に積層されているので、それはCスタイルの文字列がどのように機能するかを理解するために貴重です。同時に、プロフェッショナル/イディオムのC++プログラムでは、strcmpのような関数を使用しないでください。 CスタイルのプログラミングとC++スタイルのプログラミングとの違いに興味深い研究のために、これをチェック:

Learning Standard C++ As A New Language (PDF) Bjarne

3

あなたの代わりにchar配列のstd::stringを使用している場合で、それが動作します:

#include <iostream> 
#include <string> 
using namespace std; 

int main(){ 

    string name; 
    cout<<"Enter: "; 
    cin>>name; 
    if(name == "hello"){ 
        cout<<"Yes it works!"; 
    } 

    return 0; 
} 
関連する問題