将美元金额转换为字符串

时间:2013-11-20 03:32:39

标签: c++ arrays processing

作业是这个(取自网站)

  

编写一个显示模拟薪水的程序。该程序应该要求用户输入   日期,收款人的姓名和支票金额。然后它应该显示模拟   检查一下美元金额,如图所示。

     

日期:2007年11月24日

     

付诸命令:JohnPhillips $ 1920.85

     

一千二百八十五美分

我已经完成了很多工作,但问题在于如何打印出文本金额。这就是我到目前为止(注意,这只是属于类的函数)

#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include "TextVersionOfNumber.h"


using namespace std;

string TextVersionOfNumber::convertNumberToText()
{

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

    string twenty_90[] = {"","","twenty","thirty","forty",
        "fifty", "sixty", "seventy", "eighty", "ninety"};


    double amount;
    int a = amount/1000;
    int b = (amount/100) - (a*10);
    int c =  (amount/10) - (a*100) - (b*10);
    int d = amount - (a*1000) - (b*100) -  (c*10);
    int cents = (amount*100) - (a*100000) - (b*10000) -  (c*1000) - (d*100);

    if (a >= 1)
        amount_string = one_19[a] + " thousand " + one_19[b] + " hundred " 
}

void TextVersionOfNumber::setAmount(double DollarAmount)
{
    DollarAmount = amount;
}

if语句是我开始做一个大型嵌套if块的地方,但是我的老师说“我不会接受带有if语句而不是数组处理的程序!需要使用决策结构来实现这个逻辑;但是使用10-20“if”语句是不可接受的!“

显然,我应该使用这种被称为“数组处理”的逻辑,但我对它的含义没有丝毫的线索,到目前为止,我的搜索只发现了初始化和各种填充方式。访问一个数组。问题是:数组处理到底是什么,我如何使用它来完成此代码?不要为我完成代码,我通过例子来学习最好大声笑。

好的,我做到了,遇到了一些问题,修好了,现在一切正常。我打电话给她,她说可以使用一些if语句,但她不希望我只使用if语句来完成所有操作。所以,谢谢你们!

2 个答案:

答案 0 :(得分:1)

那么你可以得到每个数字的第一个数字并通过一些数组运行它:

int thousands = amount / 1000;
int hundreds = amount % 1000 / 100;
int tens = amount % 100 / 10;
int ones = amount % 10;
int decimal = amount - static_cast<int>(amount) * 100; 
//takes out the decimal and multiplies by 100
final_string = th_string[thousands] + hu_string[hundreds] + te_string[tens] + o_string[ones] + to_string(decimal) + "cents";

当然你必须实现_string:我不打算为你做HW?

答案 1 :(得分:0)

  

“我做了很多,但问题在于如何打印   超出文本金额。“

嗯,你可以尝试这样的事情:

string _0_9[] = { "", "one", "two", ..., "nine" };
string _0x_9x[10] = { "", "", "twenty", "thirty", "forty", ... "ninety" };
string _x0_x9[10][10] = {
    _0_9, // (not sure if you can do this, otherwise you can set it another way)
    { "ten", "eleven", "twelve", ..., "nineteen" },
    _0_9, _0_9, _0_9, _0_9, _0_9, _0_9, _0_9, _0_9
}; 
string tags[] = {"", "hundred", "thousand", "million", ...}

所以你可以尝试一次将数字减少3位数:

int tagIndex = 0, value = 12345, remainder;
while (value > 0) {
    remainder = value % 1000; // (== 345 first time)
    value = (value - remainder) / 1000; // (move the numbers down, so 12 is left)
    int hundredsIndex = value / 100; // (== 3 first time)
    int tensIndex = value % 100 / 10; // (== 4 first time)
    int onesIndex = value % 10; // (== 5 first time)
    amount_string = _0_9[hundredsIndex] + tags[(hundredsIndex>0?1:0)]
                    + _0x_9x[tensIndex] + _x0_x9[tensIndex][]
                    + tags[tagIndex]
                    + amount_string;
    tagIndex = tagIndex + 1; // "thousand" will be used on next loop pass
}

这只是一个例子 - 我从脑子里拿出C ++而没有时间测试任何一个(所以它可能不会编译,你的计算机可能会崩溃成一个小的奇点) ,但希望你明白了;)。此外,我没有处理美分,但你可以搞清楚。 ;)