将数字转换为文本,C++
Converting numbers to text, C++
对于输入数字,比如232,我希望能够以文本形式写出数字:二百三十二。我有一个保存这些数字的数组
Array[0] = 2, Array[1] = 3, Array[2] = 2.
我写了一个
switch statement
它看到数字并打印它的文本,例如二百三二。我不知道如何将"三"动态地转化为"三十"。假设我有更多的数字要拼写,比如 452,232。
你不能独立处理数字,就这么简单。
例如,21
的文本是"二十"和"一"的串联,但11
的文本不是"十"和"一"的串联。
此外,"1001"不会变成"一千零百零一"。
您可以使用函数调用来降低逻辑复杂性,但您将需要逻辑一次查看多个数字。
在维基百科上查看此实现。这可能是你想要的
直接从维基百科复制,如果链接断开。
请先查看链接,如果要编写改进的解决方案
#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"
等等,考虑非标准的情况,如十一或一百零一等等。
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
int main() {
setlocale(LC_ALL,"Turkish");
int ikibsm, yuzler, sayi,birler,onlar;
clrscr();
do {
printf("nSayıyı giriniz:");
scanf("%d", &sayi);
yuzler=sayi/100;
ikibsm=sayi%100;
onlar=ikibsm/10;
birler=ikibsm%10;
switch (yuzler)
{
case 0: printf("") ;break;
case 1: printf("Yüz ") ;break;
case 2: printf("İkiyüz ") ;break;
case 3: printf("Üçyüz ") ;break;
case 4: printf("Dört Yüz ") ;break;
case 5: printf("Beş Yüz ") ;break;
case 6: printf("Altı Yüz ") ;break;
case 7: printf("Yedi Yüz ") ;break;
case 8: printf("Sekiz Yüz ") ;break;
case 9: printf("Dokuz Yüz ") ;break;
}
switch (onlar)
{
case 1: printf("On ") ;break;
case 2: printf("Yirmi ") ;break;
case 3: printf("Otuz ") ;break;
case 4: printf("Kırk ") ;break;
case 5: printf("Elli ") ;break;
case 6: printf("Altmış ") ;break;
case 7: printf("Yetmiş ") ;break;
case 8: printf("Seksen ") ;break;
case 9: printf("Doksan ") ;break;
}
switch(birler)
{
case 1: printf("Bir ") ;break;
case 2: printf("İki ") ;break;
case 3: printf("Üç ") ;break;
case 4: printf("Dört ") ;break;
case 5: printf("Beş ") ;break;
case 6: printf("Altı ") ;break;
case 7: printf("Yedi ") ;break;
case 8: printf("Sekiz ") ;break;
case 9: printf("Dokuz ") ;break;
}
} while (sayi<1000);
}
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何在c++中从文本文件中逐行读取整数
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何根据单词在文本中出现的概率输出单词
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- C++试图读取一个文件并输出到另一个文本文件
- 如何通过套接字将文本文件的内容从服务器发送到客户端