6

たとえば 232 という入力数値の場合、数値をテキスト形式で書き出せるようにしたかったのです: 232。これらの数値を保持する配列があります

Array[0] = 2, Array[1] = 3, Array[2] = 2.

私は書いた

switch statement

数字を見て、テキストを出力します。たとえば、203 2 です。その「3」を「30」に動的に変換する方法がわかりません。452,232 のように、綴る数字がもっとあるとします。

4

4 に答える 4

3

数字を個別に処理することはできません。それはとても簡単です。

たとえば、 のテキスト21は "twenty" と "one" を連結したものですが、 のテキスト11は "ten" と "one" を連結したものではありません。

また、「1001」は「千ゼロ百ゼロワン」にはなりません。

関数呼び出しを使用してロジックの複雑さを抑えることができますが、一度に複数の数字を調べるにはロジックが必要になります。

于 2012-12-07T14:25:23.390 に答える
2

wikipedia でこの実装を確認してください。それはおそらくあなたが望むものです

リンクが壊れた場合は、ウィキペディアから直接コピーします。
改善された解決策が書かれている場合は、最初にリンクを参照してください

#include <string>
#include <iostream>
using std::string;

const char* smallNumbers[] = {
  "zero", "one", "two", "three", "four", "five",
  "six", "seven", "eight", "nine", "ten",
  "eleven", "twelve", "thirteen", "fourteen", "fifteen",
  "sixteen", "seventeen", "eighteen", "nineteen"
};

string spellHundreds(unsigned n) {
  string res;
  if (n > 99) {
    res = smallNumbers[n/100];
    res += " hundred";
    n %= 100;
    if (n) res += " and ";
  }
  if (n >= 20) {
    static const char* Decades[] = {
      "", "", "twenty", "thirty", "forty",
      "fifty", "sixty", "seventy", "eighty", "ninety"
    };
    res += Decades[n/10];
    n %= 10;
    if (n) res += "-";
  }
  if (n < 20 && n > 0)
    res += smallNumbers[n];
  return res;
}


const char* thousandPowers[] = {
  " billion", " million",  " thousand", "" };

typedef unsigned long Spellable;

string spell(Spellable n) {
  if (n < 20) return smallNumbers[n];
  string res;
  const char** pScaleName = thousandPowers;
  Spellable scaleFactor = 1000000000;   // 1 billion
  while (scaleFactor > 0) {
    if (n >= scaleFactor) {
      Spellable h = n / scaleFactor;
      res += spellHundreds(h) + *pScaleName;
      n %= scaleFactor;
      if (n) res += ", ";
    }
    scaleFactor /= 1000;
    ++pScaleName;
  }
  return res;
}

int main() {
#define SPELL_IT(x) std::cout << #x " " << spell(x) << std::endl;
  SPELL_IT(      99);
  SPELL_IT(     300);
  SPELL_IT(     310);
  SPELL_IT(    1501);
  SPELL_IT(   12609);
  SPELL_IT(  512609);
  SPELL_IT(43112609);
  SPELL_IT(1234567890);
  return 0;
}
于 2012-12-07T14:48:27.457 に答える
1

数字の位置をよく考える

あなたの場合

3 が位置 1 にある場合: Array[1]=3 then cout "thirty"

3 が位置 2 にある場合: Array[2]=3 then cout "three hundred"

11 や 100 などの非標準的なケースを考えてみましょう。

于 2012-12-07T14:26:44.510 に答える