たとえば 232 という入力数値の場合、数値をテキスト形式で書き出せるようにしたかったのです: 232。これらの数値を保持する配列があります
Array[0] = 2, Array[1] = 3, Array[2] = 2.
私は書いた
switch statement
数字を見て、テキストを出力します。たとえば、203 2 です。その「3」を「30」に動的に変換する方法がわかりません。452,232 のように、綴る数字がもっとあるとします。
たとえば 232 という入力数値の場合、数値をテキスト形式で書き出せるようにしたかったのです: 232。これらの数値を保持する配列があります
Array[0] = 2, Array[1] = 3, Array[2] = 2.
私は書いた
switch statement
数字を見て、テキストを出力します。たとえば、203 2 です。その「3」を「30」に動的に変換する方法がわかりません。452,232 のように、綴る数字がもっとあるとします。
数字を個別に処理することはできません。それはとても簡単です。
たとえば、 のテキスト21
は "twenty" と "one" を連結したものですが、 のテキスト11
は "ten" と "one" を連結したものではありません。
また、「1001」は「千ゼロ百ゼロワン」にはなりません。
関数呼び出しを使用してロジックの複雑さを抑えることができますが、一度に複数の数字を調べるにはロジックが必要になります。
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;
}
数字の位置をよく考える
あなたの場合
3 が位置 1 にある場合: Array[1]=3 then cout "thirty"
3 が位置 2 にある場合: Array[2]=3 then cout "three hundred"
11 や 100 などの非標準的なケースを考えてみましょう。