• ベストアンサー

二次元配列の参照とデータ取得について

いつもお世話になっております。 C言語で以下のようなことをしたいのですが可能でしょうか。 <二次元配列のデータ> [AA,11][BB,22][CC,33] ・検索文字列⇒"BB" 上記検索文字列"BB"が二次元配列データの左側(AA,BB,CCなど)と 照合されて一致した場合、その照合した配列の右側(11,22,33)を アウトプットとして返すようにしたいのですが実現可能でしょうか。

  • TEVEZ
  • お礼率58% (10/17)

質問者が選んだベストアンサー

  • ベストアンサー
  • goosyu
  • ベストアンサー率58% (36/62)
回答No.4

>ご指摘ありました11,22...は文字列です。ここではあくまで文字列として受け取ってください。 →文字列として処理した場合は次のようになります。 #include "stdio.h" #include "string.h" #if 0 /* ここを1にすると上のコードが有効になります。 */ /* 構造体で行う方法 */ int main(void) { typedef struct ST_TABLE { char *pStr; char *pValue; } TABLE; TABLE table[]={{"AA","11"},{"BB","22"},{"CC","33"}}; char *pTargetStr; int i; char *pAns; char buffer[256]; /*pTarget = "BB";*/ printf("検索する文字列を入力して下さい。\n"); scanf("%s", buffer); pTargetStr = buffer; pAns = NULL; /* 見つからない場合を想定して初期化 */ for (i=0;i<sizeof(table)/sizeof(table[0]);i++) { if (0 == strcmp(table[i].pStr, pTargetStr)) { pAns = table[i].pValue; break; } } if (i>=sizeof(table)/sizeof(table[0])) { printf("[%s]はみつかりません。\n", pTargetStr); } else { printf("[%s]は[%s]です。\n", pTargetStr, pAns); } return 0; } #else /* 2次元配列で行う方法 */ int main(void) { char *pTable[][2]={{"AA","11"},{"BB","22"},{"CC","33"}}; char *pTargetStr; int i; char *pAns; char buffer[256]; /*pTarget = "BB";*/ printf("検索する文字列を入力して下さい。\n"); scanf("%s", buffer); pTargetStr = buffer; pAns = NULL; /* 見つからない場合を想定して初期化 */ for (i=0;i<sizeof(pTable)/sizeof(pTable[0]);i++) { if (0 == strcmp(pTable[i][0], pTargetStr)) { pAns = pTable[i][1]; break; } } if (i>=sizeof(pTable)/sizeof(pTable[0])) { printf("[%s]はみつかりません。\n", pTargetStr); } else { printf("[%s]は[%s]です。\n", pTargetStr, pAns); } return 0; } #endif

TEVEZ
質問者

お礼

解説ありがとうございます! 構造体を使うということで解決できそうです。 どうもありがとうございます。 みなさまもご丁寧にありがとうございます。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

質問の内容なら構造体でやるのがよさそうに思います #include <stdio.h> #include <string.h> struct data { char str[4]; int val; }; int main() { struct data ar[4] = {"AA", 11, "BB", 22, "CC", 33, "DD", 44}; int i; for (i = 0; i < 4; i++) { if (strcmp(ar[i].str, "BB") == 0) { printf("BB=%d", ar[i].val); } } return 0 ; }

回答No.2

「二次元」の解釈が間違っているようです。 二次元配列は、buff[0][0]、buff[0][1]……buff[n][m]のような形となります。 項目が二つあるから二次元ではありません。 質問事項については、「構造体」の一次元配列をしようする方が楽でしょう。 メンバを二つ持ち、「検索する文字列」と「出力する結果」の二つがあればいいのですから。

  • chie65535
  • ベストアンサー率43% (8516/19358)
回答No.1

>[AA,11][BB,22][CC,33] これ、AA、BB、CCは「文字2つ」で、11、22、33は数値ですか? だったら、2次元配列には出来ないのでは? 2次元配列とは「1次元配列が配列になったもの」です。 質問文のケースでは「AA,11」や「BB,22」や「CC,33」が「1次元配列」です。 で「配列」とは「同一の型の要素が複数集まったもの」ですから「AA」と「11」は「同一の型」でなければなりません。 そんな訳で「回答するのが無理なくらい、基本が判って無い質問」なので、回答不可能です。

TEVEZ
質問者

お礼

みなさまご丁寧にありがとうございます。 ご指摘ありました11,22...は文字列です。ここではあくまで文字列として 受け取ってください。

関連するQ&A

  • 2次元配列の宣言について

    文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。

  • perlでの三次元配列の作り方

    perlで三次元配列をテキスト入力から作りたいのですが、例えば二次元配列の場合 foreach $line (@input) push @data, [split /[:]/, $line]; で@dataが二次元配列になるのですが、三次元配列の場合このあとに push @output, \@data; とするとリファレンスが同じであるためループをまわしてもうまく三次元になりませんよね。 解決法はありますでしょうか?

  • excel データ抽出方法

    こんいちは 列1と列2を比べて条件が一致したデータを抽出したいのですが,方法がわかりません。どなたかご存知のかた教えていただけないでしょうか? 列1  列2 aa   vv bb   dd cc   ff dd   aa ee   bb この場合aa,bb が一致する。

  • 二次元配列について

    高校の課題研究で、タイピングソフトを作ることになったのですが 二次元配列で、配列内の文字列をランダムで一つ表示するものを作りたいのですが 全然分かりません^^; プログラムを教えてくださる方いらっしゃいましたら 教えて貰えますとありがたいです><

    • ベストアンサー
    • Java
  • PHP 多次元配列変数のデータ受け渡し。

    PHP 多次元配列変数のデータ受け渡し。 こんばんは。 先日からPHPでホームページを作成しています。 この度、二次元配列に代入した数値(文字列)を 二次元配列そのままで次のページに受け渡したいと考えています。 ※また、同時に新しく入力した値も受け取りたい。下記の name="data" の様に。 《1page.php》 → 《2page.php》 の受け渡しをする場合、 《1page.php》二次元配列作成 <?php for ($i=0; $i<10; $i++) { $test[] = array($_POST['moziretsu'],$_POST['suuretsu'],$_POST['suuretsu']); //文字・数字は毎回異なります。 } ?> <html> <body> <?= $test[2] ?><br> <?= $test[4] ?><br> <form action="2page.php" method="post"> <input type="text" name="data"><input type="submit" name="submit" value="次"> </form> </body> </html> 《2page.php》二次元配列受け取り <?php $aaaa = $_POST['data']; ?> で、新規に入力した数値は取得出来ても 二次元配列の $test はどの様に取得すれば宜しいのでしょうか? グーグル等で検索させてもらっても 希望の記事に辿り着かず困っております。 もしかしたら出来ないかも知れないので その場合は1page.phpで二次元配列をしないで 2page.phpにデータを送るり、2page.phpで二次元にする等の方法を考えなければなりませんし・・・。 書き方も悪くとても小さい初歩的な質問かとは思いますが 何卒、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 2次元配列について、教えてください。

    基本的なことなのでしょうがまだよくわかっていません。 ワークシートにたとえると、1次元は縦方向(行番号方向)、二次元は横方向(列番号方向)ですよね? 列数、行数にあたるのが1次元、二次元それぞれの添字ですよね? そしてセルに当たるのが「要素」ですよね? 以上の解釈があっていたら、 1.A列やB列にあたるものはなんと呼ぶのでしょうか? 2.1行目や2行目にあたるのはなんと呼びますか? 3.ワークシートで行や列を削除するような感じで2次元配列の行や列にあたるものを削除することはできますか? 4.UBound関数は、配列の大きさを調べられますが、この大きさは添字です。ワークシートのCells(65536,1).End(xlUp)Rowのように実際にデータがどこまで入っているか調べられますか? 教えてください。 前提とした解釈自体が違っていたらそれもご指摘ください。

  • シェルの配列

    シェルで2つの配列の同じ位置の文字を同時にチェックしようとして以下のコードを組みましたが、上手くいきません。$dd中の文字が配列として扱われていないのはなぜだか教えていただけますか? #! /bin/csh -f set AA="18" set BB="20" set cc = "11 12 18 19" set dd = "24 22 20 21" @ idx = 1 foreach h_code ( $cc ) echo [$AA][$h_code][$BB][$dd[$idx]]     # ccの1個目とddの1個目をそれぞれ$AA,$BBと比較 if( $AA == $h_code && $BB == $dd[$idx] ) then echo "OK" endif @ idx++ end

  • エクセルファイルのセル値に特定文字列を追加して別ファイルに

    VB2008でのプログラム方法についての相談です。以下の手順を実現したいです。 (1)エクセルファイルのあるセル中にあるデータを取得 例)A1セルの値"AA"、A2セルの値"BB"、A3セルの値"CC"..... (2)決まりきった特定文字列と(1)の値を結合 例)くっつけたい文字列 " "+AA ⇒ くっつけたい文字列"AA" くっつけたい文字列 " "+BB ⇒ くっつけたい文字列"BB" くっつけたい文字列 " "+CC ⇒ くっつけたい文字列"CC" (3)テキストファイルを生成 ○○○.txt 例) くっつけたい文字列"AA" くっつけたい文字列"BB" くっつけたい文字列"CC"

  • textboxの二次元配列で質問

    textboxの二次元配列で質問 Visual Web Developer 2008を使いWebアプリケーションの入力フォームを開発中です。言語はVBです。  複数行のtextboxに入力された文字を連結する方法が分かりません。ネットでいろいろ検索して二次元配列をすれば可能なようですが、分かりやすく書いてあるサイトが見つからず、苦戦しています。列数は10列。行数は50行ぐらいあります。 ↓(サンプル)  例えば、下のような入力フォームのtextboxにあ・い・う・え・お・か・き……と入力された文字列で、buttonをクリックしたら「あいうえおかきくけこ…」と文字列の連結した実行結果を出したい場合です。       列   あ|い|う|え|お| | |   か|き|く|け|こ| | | 行 さ|し|す|せ|そ| | |   た|ち|つ|て|と| | |   な|に|ぬ|ね|の| | |    | | | | | | |    | | | | | | |    textboxが多いので、二次元配列と繰り返し処理(文字がなくなるまで繰り返す)を使って、簡単にできないでしょうか? 初心者なので分かりづらい質問で申し訳ありません。 参考になるページやコードがあったら教えて下さい。 よろしくお願いします。

  • エクセルでのデータ抽出について

    こんにちは!関数初心者です・・・。 どうしてもできなくて教えていただきたいのですが、たくさんのデータの中から一致するデータを表示したいのです。 下記のようなデータがあったとき、検索する文字列を入れるセルをA1とします。検索結果をB1に表示したいのです。 たとえば品目にある「鉛筆」の商品ID「AA-001」を探したいとき、セルA1に「鉛筆」と入力したら、セルB1に「AA-001」と表示したいのですが、どうしてもうまくいきません。 商品ID 業者NO 科目 品目 単価 AA-001 スズキ100 文具 鉛筆 100 AA-002 スズキ200 文具 ノート 200 BB-001 タナカ100 食品 卵 100 BB-002 タナカ200 食品 チーズ 200 CC-001 サトウ100 衣類 シャツ 100 CC-002 サトウ200 衣類 スーツ 200 どなたかおわかりになりましたら教えてください!! よろしくお願いいたします!

専門家に質問してみよう