Это задание (взято с сайта)
Напишите программу, которая отображает смоделированную зарплату. Программа должна попросить пользователя ввести
дата, имя получателя и сумма чека. Затем должен отображаться смоделированный
проверьте указанную сумму в долларах, как показано здесь.Дата: 24.11.2007
Оплатить по заказу: 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 для всего этого. Так что, спасибо, ребята!
Ну, вы можете получить первую цифру каждого числа и пропустить ее через несколько массивов:
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 для вас
«У меня достаточно много работы, но проблема заключается в том, как печатать
из текста суммы в долларах. «
Ну, вы можете попробовать что-то вроде этого:
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 ++ из своей головы и не успел протестировать какой-либо из них (так что, вероятно, он не скомпилируется, и ваш компьютер может взорваться до небольшой особенности), но, надеюсь, Вы поняли;). Кроме того, я не обращался с центами, но вы можете понять это. 😉