• 締切済み

配列同士の文字列の比較

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

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.6

比較の例(「同じ」になるケースと「異なる」になるケース)を いくつか示してください。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★アドバイス ・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] の文字列のポインタを使って比較できます。 ・以上。分かりますか?

全文を見る
すると、全ての回答が全文表示されます。
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.4

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

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

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

noname#30978
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

出来ます。 「文字列の比較」は文字列の比較関数「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にどういう引数を渡せば良いか、もう判りますよね?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

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

noname#30978
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列の配列の比較

    こんにちは。タイトルどおり簡単な質問なのですが、どうしても確認したいのでお願いします。 とあるメソッドで、2次元配列の中にいくつか大文字のOが入ってるのですが、与えられた配列にOがあればtrueを返し、なければfalseを返します。 public boolean cellAt(int row, int col){ if(space[row][col].equals("O")) return true; else return false; } rowとcolはテストメソッドから値を受け取ります。 これでプログラム自体は動くのですが、WebCatという自動的に採点するものがあるのですが、それによるとエラーがでてしまいます・・・。 どこが違うのかは教えてくれないのですが・・・。 上で間違っているとすれば、文字列の比較くらいしかないんじゃないかと思うのですが、 space[row][col].equals("O") これで比較できますよね? 他のを調べて、if (Arrays.equals(space[row][col], "O"))これを試してもみたのですが、赤線が出てしまって無理でした。 どなたか宜しくお願いします。

  • 文字列を1つの要素とした配列を作る

    はじめまして、工学系の大学生です。C言語について質問です。 文字単体をデータとして配列を作るなら、例えば char [100]; で構わないと思うのですが、文字列を1つのデータとして配列を作る場合はどうしたらいいのでしょうか?僕が思いついたのは2次元配列を用いて1つの次元をデータ数、もう1つの次元を各データの最大文字数として例えば char name[100][20]; のように定義して、 name[0][]=David; name[1][]=Mathew; などととすれば、printf関数でname[0]を出力したらDavidが出てくれるかと思ったのですが、エラーがたくさん出てきてしまいました。 もしよろしければどなたか教えていただけないでしょうか?どうぞよろしくおねがいしますm(_ _)m

  • 文字列の配列

    文字列の配列 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 のようにIPアドレスが一行に一つづつ書き込まれたテキストがあります。 ここから、それぞれのIPアドレスを文字列として配列に書き込みたいのですが、どうしたらよいのでしょうか。 IPアドレスの数だけ配列を始めに宣言して、それぞれに書き込んでいくのでは手間がかかりすぎてしまいます。 単純に数値の羅列なら scanfを使い、配列に格納できるのですが、文字列になるとどうしたらいいのかわかりません。 よろしくお願いいたします。

  • 文字列と配列について

    文字列に数字を入力して、それを配列に入れて扱いたいのですが、誰かわかる人いたら教えてもらえませんか? また、参考となるソースなどを載せてもらえたらうれしいです。

  • 文字列を配列にしたい

    お世話になります。 PHP4.3.9を利用しているのですが、以下のような文字列を分割して、求める形の配列に入れたいのですが、何か良い方法はありますでしょうか? ■文字列 abc=123&def=456&ghi=789 ■このような形にしたいと思っています↓ $hoge = array(   "abc"=>"123",   "def"=>"456",   "ghi"=>"789" ) ヒントだけでも結構ですので、ご教示いただけると幸いです。宜しくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列の文字"列"の初期化方法

    こまかな話しかもしれないのですが、2次元配列の文字列代入で、 char *array2 = {"Jan", "Feb", "March"}; //NG はNGで char *array2[3] = {"jan,", ...}; //OK なのはどうしてなのでしょうか? 1: "[3]"は明示しなくとも代入される値から分かるという理由で省略してはいけないのでしょうか? また、 2: 一次元の場合 char *array = "aaaaa"; とできるのにどうして2次元ではNGなのか、がピンと来ません。 すみませんが、宜しくお願い致します。

  • 複数配列で重複する文字列を削除する方法

    PHPで複数配列で重複する文字列が含まれている場合の処理の仕方について $a[0] = "あああいいいうううかかかききき"; $a[1] = "あああいいいうううかかかくくく"; $a[2] = "あああいいいうううかかかけけけ"; $a[3] = "あああいいいうううきききききき"; 上記のような配列があったとします(配列の要素数については可変です) 上記配列の中で共通する文字列を削除し(文字列の先頭のほうを削除) $a[0] = "かかかききき"; $a[1] = "かかかくくく"; $a[2] = "かかかけけけ"; $a[3] = "きききききき"; のようにしたいのですが処理方法が思い浮かびません。 文字列を分解して比較する処理まではできるのですが、要素数が3つになったり7つになったりした場合の方法が思い浮かびません。 どなたか 分かる方よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字列の比較と比較結果の表示

    Visual Basicで文字数が同じ2つの文字列を比較(文字列1を文字列2と比較)し、違う文字部分を色を付けて文字列1を表示させるにはどうしたら良いのでしょうか。教えてください。お願いします。 文字列1: AGAAGGAGCUUU 文字列2: AGAACCAGCUUU

  • "3.5.23.56.7.1"なる文字列から配列を

    php5を使っています。 "3.5.23.56.7.1" という文字列から、 $arr[0]="3"; $arr[1]="3.5"; $arr[2]="3.5.23"; $arr[3]="3.5.23.56"; $arr[4]="3.5.23.56.7"; $arr[5]="3.5.23.56.7.1"; という配列を得るにはどうすればいいのでしょうか? おわかりのかたいらっしゃいましたら、お教え頂けましたら幸いです。 以上、よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 文字列比較

    最長10文字の文字列を2件入力し、char型の配列にそれぞれ格納する。2つの文字列を比較し、文字列が同じだったら「equal」を表示し異なっていたら「Not equal」を表示するプログラムを作成せよという課題が出ました。 条件として、11文字以上の文字が入力されたら、先頭から10文字までを有効とし、11文字目以降を無視する。下記のプログラムで文字列1に11文字以上入力すると、うまく動きません。なぜ、うまくいかないかと、どうなおしたらよいかを教えてください。 #include<stdio.h> #include<string.h> #define max_length 10 void get_string (char *p_str, int size); int main() { char string1[max_length+2]; char string2[max_length+2]; printf("文字列1:"); get_string(string1,max_length+2); printf("文字列2:"); get_string(string2,max_length+2); if(!strncmp(string1,string2,max_length)) puts("equal"); else puts("Not equal"); } void get_string (char *p_str, int size) { fgets(p_str,size,stdin); }