No dzień dobry.
Jestem nowy na tym forum, więc witam serdecznie.
Miałem długą przerwę w programowaniu, więc w ramach przypomnienia postanowiłem zrobić coś bardzo prostego, czyli właśnie rzeczony konwerter.
I zwracam się z prośbą, czy można ten kod jakoś bardziej zoptymalizować:
#include <iostream>
#include <string>
#include <vector>
const std::string digits[] = {
"",
"jeden",
"dwa",
"trzy",
"cztery",
"piec",
"szesc",
"siedem",
"osiem",
"dziewiec"
};
const std::string dozens[] = {
" ",
" ",
"dwadziescia",
"trzydziesci",
"czterdziesci",
"piecdziesiat",
"szescdziesiat",
"siedemdziesiat",
"osiemdziesiat",
"dziewiecdziesiat",
};
const std::string hundreds[] = {
"",
"sto",
"dwiescie",
"trzysta",
"czterysta",
"piecset",
"szescset",
"siedemset",
"osiemset",
"dziewiecset"
};
const std::string fromTenToNineteen[] = {
"dziesiec",
"jedenascie",
"dwanascie",
"trzynascie",
"czternascie",
"pietnascie",
"szescnascie",
"siedemnascie",
"osiemnascie",
"dziewiectnascie"
};
std::string convertNumberToString(int number)
{
std::string converted_number;
if(number == 0)
return "zero";
if(number < 0)
{
converted_number += "minus ";
number *= -1;
}
if(number >= 1000)
{
switch(number / 1000)
{
case 1: converted_number += "tysiac "; break;
////////////////
case 2:
case 3:
case 4: converted_number += digits[number / 1000] + " tysiace "; break;
////////////////
case 5:
case 6:
case 7:
case 8:
case 9: converted_number += digits[number / 1000] + " tysiecy "; break;
}
}
if(number % 1000 >= 100)
converted_number += hundreds[number / 100 % 10] + " ";
if(number % 100 >= 20)
converted_number += dozens[number / 10 % 10] + " ";
if((number % 100 >= 10) && (number % 100 < 20))
return converted_number += fromTenToNineteen[number % 10];
return converted_number += digits[number % 10];
}
int main()
{
int number;
std::cout << "> ";
std::cin >> number;
if(std::cin.fail())
{
std::cout << "Invalid input\n";
return EXIT_FAILURE;
}
if((number <= -10000) || (number >= 10000))
{
std::cout << "Number must be in range from -9999 to 9999\n";
return EXIT_FAILURE;
}
std::cout << convertNumberToString(number) << "\n";
std::cin.ignore();
std::cin.get();
}
Dziękuję za pomoc i pozdrawiam ogółem.