0

is_it_valid_color("yellow")仕事と出力FOUND ITを使用するのに使用しないのはなぜis_it_valid_color(x.c_str());ですか?

nullで終わる文字列に関係していると感じています。コンソールでの出力は同じように見えます。

color: 'yellow'
FOUND IT
color: 'yellow'

.

const char *color_names[] = {"yellow", "green", "red"};
const int color_names_SIZE = 3;

void is_it_valid_color(const char* color) {
    cout << "color: '" << color << "'" << endl;

    for(int i = 0; i < color_names_SIZE; ++i) {
        if(color == *(color_names + i)) {   
            cout << "FOUND IT" << endl;
            break;
        }
    }
}



is_it_valid_color("yellow");


string x = "yellow";

is_it_valid_color(x.c_str());
4

5 に答える 5

3

char* と比較するために「==」演算子を使用しないでください。

代わりに、cstring ライブラリの strcmp 関数を使用する必要があります

for(int i = 0; i < color_names_SIZE; ++i) {
    if(strcmp(color,color_names[i]) == 0) {   
        cout << "FOUND IT" << endl;
        break;
    }
}

http://en.cppreference.com/w/cpp/string/byte/strcmp

于 2013-10-08T06:00:25.117 に答える
0

文字列ではなくポインタを比較しています。簡単な修正は変更することです

const char *color_names[] = {"yellow", "green", "red"};

std::string color_names[] = {"yellow", "green", "red"};

ポインターはどこでも使用しないようにしてください。ポインターは、特に学習しているときに問題を引き起こすだけです。ポインターの複雑さをすべて追加しなくても、十分に学習できます。

于 2013-10-08T06:05:02.917 に答える
0

文字列を比較するコードの部分を書き直してください。

間違いなく、c_str() と char* は両方とも null で終了します。

于 2013-10-08T06:01:59.430 に答える