0

私は、整数入力を対応する英語版に置き換える C++ のプログラムを作成する初期段階にあります。このプログラムの作成方法についての説明は必要ありませんが、コードの特定の部分が特定の方法でどのように動作するかについての洞察と、おそらくそれを修正する方法のヒントが必要です。

std::string strToEng(std::string s)
{
  int sInt = atoi(s.c_str());


  std::string digit1[] = {"zero", "one", "two", "three", "four", "five", "six", "seven",
                          "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                          "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", 
                          "nineteen"};

  switch(s.size())
  {
    case 1:
    {
      int temp = int(s[0]);
      return digit1[temp];
    }
   }

  return "error";
}

問題は、switch ステートメントの digit1 配列にあります。このコードをコンパイルすると、ケース 1 で目的の出力が返されません。digit1[temp] をある種の定数 (つまり、digit1[3]) に変更すると、正しく表示されます。変数を使用して配列にインデックスを付けることに問題はありますか? どうすればこれを解決できますか?

編集: 9 よりも大きい数字を処理する方法がないのに、まだ digit1 に含まれているというのは、おそらく欺瞞的です。これは、このコードが何度も書き直されているためです。

4

2 に答える 2

2

digit1[sInt]すでに文字列を int 値に変換しているので、使用する必要があります...

s[0]は文字列の最初の文字にすぎないため、最初の文字'0'が 48 の場合 (ASCII テーブルを参照)、テーブルの 49 番目の要素にアクセスします... ケース 1 では、試すことができますint(s[0])-'0'。そしてそれはうまくいくはずです。

于 2013-03-20T20:11:48.847 に答える
0

s の最初の文字を int にキャストするため、s に数字が含まれている場合、値は 10 進数の ASCII 値の範囲である 48 ~ 57 になります。あなたの機能?

于 2013-03-20T20:12:15.817 に答える