读取数字并转换为单词

Posted

技术标签:

【中文标题】读取数字并转换为单词【英文标题】:Reading digits and converting to words 【发布时间】:2017-01-26 01:20:11 【问题描述】:

我是 C++ 新手,我必须编写一个程序,将用户的 4 位数字转换为单词,即 7238 将被写为七二三八。然而,它把每个数字都写成未知数。对菜鸟的任何建议将不胜感激。

#include iostream

using namespace std;

int main() 


     char number;


    cout << "Please enter a 4 digit number: ";

     cin >> number;

        switch(number)

        case 1 :
            cout<< "one"; 
            break;
        case 2 :
            cout<< "two";
            break;
        case 3 :
            cout<< "three";
            break;
        case 4 :
            cout<< "four";
            break;
        case 5 :
            cout<< "five";
            break;
        case 6 :
            cout<< "six";
            break;
        case 7 :
            cout<< "seven";
            break;
        case 8 :
            cout<< "eight";
            break;
        case 9 :
            cout<< "nine";
            break;
        case 0 :
            cout<< "zero";
            break;

        default :
            cout << "UNKNOWN.";
   


【问题讨论】:

一个 char 是单个字符 - 你打算如何读取 4 位数字? 你熟悉循环吗? number 变量的类型必须是 int ,你必须尝试使用​​循环分隔数字,除法和计算余数 不,我对循环并不熟悉。 【参考方案1】:

听起来像是家庭作业,但这里有一些提示。将您的number 变量更改为int 的类型您可以将数字分解为具有除法和模数的单个变量。我会把它们塞进一个整数数组中。

int array[4];
arr[0] = (number / 1000) % 10;  // Thousands
.......                         // You do the hundreds and tens
arr[3] = (number % 10);         // Ones

然后在您的计数器小于 4(数组的长度)的 switch 语句周围使用循环。确保在每个循环结束时增加计数器。哦,它是#include &lt;iostream&gt;

【讨论】:

【参考方案2】:

使用to_stringrange based for

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

int main()

    int number;
    cout << "Enter the number: ";
    cin >> number;

    string strnum = to_string(number);
    for (auto c : strnum)
    
        switch (c)
        
            case '0': cout << "zero "; break;
            case '1': cout << "one "; break;
            case '2': cout << "two "; break;
            case '3': cout << "three "; break;
            case '4': cout << "four "; break;
            case '5': cout << "five "; break;
            case '6': cout << "six "; break;
            case '7': cout << "seven "; break;
            case '8': cout << "eight "; break;
            case '9': cout << "nine "; break;
            default: cout << "non-digit"; break;
        
    
    return 0;

【讨论】:

【参考方案3】:

您需要在案例语句中输入 ascii 值。目前,您正在比较数字 0 - 9 的 ascii 值。 值可以在这里找到:http://www.asciitable.com/

【讨论】:

无需从表中获取值,只需使用 '1' 等字符文字即可。 我同意,但您可以选择其中一种。它更像是“桌子”而不是“桌子”。我认为从 OP 的帖子中可以清楚地看出他们不知道字符值和数字值之间的区别。所以我的链接和方法有两个目的。 1. 一个解决方案 2. 关于 ascii 值的课程 我想,但我们不想推广将 ASCII 值直接硬编码到程序中的坏习惯。【参考方案4】:

您的变量是char 类型。 char 存储一个字符,通常是 ASCII 编码的。例如,如果用户输入“1”,则通常会转换为整数值 49,而不是 1。读入 int 或更改大小写标签以使用字符文字:

case '1':
    cout << "one";
    break;

然后您可以使用循环来读取多个数字。

【讨论】:

以上是关于读取数字并转换为单词的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将数字单词转换为整数?

软件构造-实验1 根据状态转换图手工构造词法扫描器

Django 模板如何将数字转换为单词

使用类 C# 将数字转换为单词

在 SQL 中将数字转换为单词 [重复]

切换语句将单词转换为数字? C ++