/ 文字配列間のこの比較がうまくいかないのはなぜですか。 - c ++、配列、ポインタ、演算子

なぜ文字配列間の比較が機能しないのですか? - C ++、配列、ポインタ、演算子

char a[1][2];
char b[1][2];

a[0][0] = "a";
a[0][1] = "b";
b[0][0] = "a";
b[0][1] = "b";

if(a[0] == b[0]){
cout << "workedn";
}

私が言うことができる限りでは、文字の配列の間のこの比較はあなたがそれを期待するようには働かない。ifステートメントは実行されない。 a == b falseを返します。どうしてこれなの?

回答:

回答№1は5

この声明

if(a == b){
cout << "workedn";
}

aとbは、暗黙的にへのポインタに変換されます。対応する配列の最初の要素だから2つのポインタの比較があります。配列はメモリ内の異なる領域を占有するため、条件は常にfalseになります。

比較のような操作はありません配列用です。 2つの配列を比較するには、その配列のすべての要素を互いに比較する必要があります。例えば、標準的なアルゴリズムstd :: equalを使うことができます。例えば

if( std::equal( std::begin( a ), std::end( a ), std::begin( b ) ) ){
cout << "workedn";
}

もう1つの方法は、比較演算子を持つ標準のコンテナstd :: arrayを使用することです。例えば

std::array<char, 2> a = { "a", "b" };
std::array<char, 2> b = { "a", "b" };

if(a == b){
cout << "workedn";
}

回答№2については4

あなたはそのような配列を比較することはできません。配列を反復処理して、要素の各ペアを順番に比較する必要があります。あるいは(そしてできれば)静的配列を std::vector。表示されているコードは、 ポインタ a そして b もちろんどれは等しくありません。