0

重複の可能性:
C で文字列を正しく比較するにはどうすればよいですか?

#include <iostream>
using namespace std;

int main(){

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

    return 0;
}

プロンプトで hello と入力したときに、「はい、動作します!」と表示されなかったのはなぜですか? メッセージ?

4

4 に答える 4

9

strcmp等しいかどうかをテストするために使用する必要があります。

namestd::stringaではなく配列でありhello、文字列リテラル、つまり aconst char*です。文字列ではなくポインタを比較しています。

于 2012-04-29T14:41:57.717 に答える
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; 
} 
于 2012-04-29T14:44:48.493 に答える
3

std::stringchar配列の代わりに使用すると、次のように機能します。

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

int main(){

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

    return 0;
}
于 2012-04-29T14:50:05.663 に答える
1

他の言語に期待されるような高レベルの動作を持たない低レベルの文字列(「C文字列」)があります。文字列リテラルを(「引用符」で)入力すると、次のタイプの文字列の1つが作成されます。

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

C ++では、人々が最初に行うことの1つは、その低レベルの文字列をのコンストラクターに渡してstd::string、使い慣れたインターフェイスでより便利なクラスのインスタンスを作成することです。

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

C ++は非常にCに似た基盤の上に階層化されているため、Cスタイルの文字列がどのように機能するかを理解することは重要です。同時に、専門的/慣用的なC++プログラムは。のような関数を使用するべきではありませんstrcmp。CスタイルのプログラミングとC++スタイルのプログラミングの違いに関する興味深い研究については、以下を確認してください。

Bjarneによる新しい言語としての標準C++の学習(PDF)

于 2012-04-29T14:49:07.573 に答える