プロが教える店舗&オフィスのセキュリティ対策術

一次元配列と二次元配列での文字列の比較って、出来ないんでしょうか?

A 回答 (6件)

比較の例(「同じ」になるケースと「異なる」になるケース)を


いくつか示してください。
    • good
    • 0

★アドバイス


・a 文字列と b[0] 文字列を比較、
 a 文字列と b[1] 文字列を比較します。
 これで比較できます。

サンプル:
if ( strcmp(a,b[0]) == 0 ){
 /* a 文字列と b[0] 文字列は同じ */
}
if ( strcmp(a,b[1]) == 0 ){
 /* a 文字列と b[2] 文字列も同じ */
}

その他:
・a[10] の文字列は a が文字列のポインタですよね。
 そして b[0]、b[1] が文字列のポインタになります。
 よって a、b[0]、b[1] の文字列のポインタを使って比較できます。
・以上。分かりますか?
    • good
    • 0

>char a[10] = "abcd efgh";


>char b[2][10] = {{"opq rst"},{"abcd efgh"}};
>と中身に入っています
・・・は、よいのですが、
この時は「同じ」なのでしょうか?「違う」のでしょうか?

上の例だと「違う」になって
>char a[10] = "abcd efgh";
>char b[2][10] = {{"abcd "},{"efgh"}};
だと「同じ」にしたいということでしょうか?
    • good
    • 0

★配列同士の文字列の比較って何?


・もしかして文字列ポインタへの配列と二次元配列の文字列の比較かな。
 つまり、
 char *msg1[ 3 ] = { ←文字列ポインタへの配列
  "あいうえお",
  "かきくけこ",
  "さしすせそ",
 };
 と
 char msg2[ 3 ][ 11 ] = { ←二次元配列の文字列
  "あいうえお",
  "かきくけこ",
  "さしすせそ",
 };
 ですか。
・この場合は、
 msg1[0] と msg2[0] を strcmp で比較、
 msg1[1] と msg2[1] を strcmp で比較、
 msg1[2] と msg2[2] を strcmp で比較できます。
・『配列同士の文字列』の配列同士とは何?
 もうちょっとデータ内容などを補足してもらえませんか?
 これ以上は予想できません。
・以上。補足要求します。

この回答への補足

こちらも説明不足だったようで・・・。
どちらの配列もchar型で文字列が入っています。
これを、strcmpで中に入っている文字列が全く一緒なら
"同じ"と表示したいのです。
char a[10] = "abcd efgh";
char b[2][10] = {{"opq rst"},{"abcd efgh"}};
と中身に入っています。

補足日時:2007/05/08 13:08
    • good
    • 0

出来ます。



「文字列の比較」は文字列の比較関数「strcmp」の引数に文字列のアドレスを渡すだけなので、引数の渡し方さえ間違えなければ、一次元配列だろうが二次元配列だろうが三次元配列だろうが四次元配列だろうが、次元数は関係ありません。

charの配列を文字列として扱い、配列の先頭のアドレスを扱う場合は「0番目の要素のアドレス」と記述します。

つまり
char array1[10];
char *ptr;
と定義した時
ptr=&array1[0];
と書く訳です。

この時、先頭のアドレスを参照する場合「&」と「[0]」を省略出来ます。

つまり
ptr=&array1[0];
と書くのと
ptr=array1;
と書くのは同じです。

これは、二次元配列でも同じです。

char array2[10][10];
char *ptr1;
char *ptr2;
char *ptr3;
と定義した時
ptr1=&array2[0][0];
ptr2=&array2[1][0];
ptr3=&array2[2][0];
と書けます。

先頭のアドレスを参照する場合の「&」と「[0]」の省略はここでも可能ですから
ptr1=&array2[0][0];
ptr2=&array2[1][0];
ptr3=&array2[2][0];

ptr1=array2[0];
ptr2=array2[1];
ptr3=array2[2];
とも書けます。

まずは「&」と「[0]」を省略しない書き方で、strcmpを呼び出すコードを書いてみましょう。

一次元配列と二次元配列での文字列の比較をする場合、strcmpにどういう引数を渡せば良いか、もう判りますよね?
    • good
    • 0

何が訊きたいのかわかりません。



- 一次元配列と二次元配列を"どのように"比較するのですか?
- 配列の中身が文字列ということですか?
それともcharの一次元配列で文字列を表現しているのですか?
 そのとき二次元配列の意味は?

この回答への補足

説明不足でしたね。すいません。
どちらの配列もchar型で文字列が入っています。
これを、strcmpで中に入っている文字列が全く一緒なら
"同じ"と表示したいのです。
char a[10] = "abcd efgh";
char b[2][10] = {{"opq rst"},{"abcd efgh"}};
と中身に入っています。

補足日時:2007/05/08 12:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!