- ベストアンサー
二次元配列の参照とデータ取得について
いつもお世話になっております。 C言語で以下のようなことをしたいのですが可能でしょうか。 <二次元配列のデータ> [AA,11][BB,22][CC,33] ・検索文字列⇒"BB" 上記検索文字列"BB"が二次元配列データの左側(AA,BB,CCなど)と 照合されて一致した場合、その照合した配列の右側(11,22,33)を アウトプットとして返すようにしたいのですが実現可能でしょうか。
- みんなの回答 (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
その他の回答 (3)
- php504
- ベストアンサー率42% (926/2160)
質問の内容なら構造体でやるのがよさそうに思います #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 ; }
- SilverThaw
- ベストアンサー率32% (260/806)
「二次元」の解釈が間違っているようです。 二次元配列は、buff[0][0]、buff[0][1]……buff[n][m]のような形となります。 項目が二つあるから二次元ではありません。 質問事項については、「構造体」の一次元配列をしようする方が楽でしょう。 メンバを二つ持ち、「検索する文字列」と「出力する結果」の二つがあればいいのですから。
- chie65536(@chie65535)
- ベストアンサー率44% (8755/19867)
>[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」は「同一の型」でなければなりません。 そんな訳で「回答するのが無理なくらい、基本が判って無い質問」なので、回答不可能です。
お礼
みなさまご丁寧にありがとうございます。 ご指摘ありました11,22...は文字列です。ここではあくまで文字列として 受け取ってください。
お礼
解説ありがとうございます! 構造体を使うということで解決できそうです。 どうもありがとうございます。 みなさまもご丁寧にありがとうございます。