5

重複の可能性:
Cで文字列をオンにする最良の方法

switch ステートメントと一緒に文字列 (c 文字配列) に使用されている一般的なアプローチは何ですか? として保存されている通貨についてデータベースにクエリを実行しています

"USD"
"EUR"
"GBP"

等々。PHPのバックグラウンドから来て、私は単純に次のようにします:

switch ($string) {
  case "USD":
   return "$";
   break;
  case "EUR":
   return "€";
   break;   
  case "GBP":
   return "£";
   break;
  default:
   return "$";
}

C では、case-value は整数でなければなりません。そのようなものをCで実装するにはどうすればよいですか?巨大な if/else ブロックにたくさんの strcmp を書くことになるのでしょうか? また、通貨の最初の文字を単純に比較することはできないことに注意してください (この例ではありませんが) 一部は同じ文字で始まります。

4

3 に答える 3

5

1 つの方法は、C 文字列の配列を定義し、それを順序付けの定義として使用することです。

const char *currencies[] = {"USD", "GBP", "EUR"};

currenciesこれで、文字列を検索し、switch ステートメントでそのインデックスを使用できます。

あなたは空想を得ることができます-文字列をソートし、使用bsearchしてインデックスを見つけますO(LogN)

于 2012-05-07T11:09:09.177 に答える
1

この場合、strcmp関数を使用して if ステートメントを使用することをお勧めします。

于 2012-05-07T11:12:24.847 に答える
1

多くの言語で正しい答えは、ある種の連想コンテナーです。std::mapたとえば、C++ では。Glib には連想配列の C 実装があります: here を参照してください。独自のライブラリが他にもあります。

于 2012-05-07T11:09:26.753 に答える