|
Borland C ++ Builder FAQ
|
||
| The content | The last update: 12/12/2008 | |
|
How to implement the total in words? The author: OlegGG //--------------------------------------------------------------------------------------
//summa.h
AnsiString triada (AnsiString in, int tn)
{
if (in == " ") return "";
if (in == "000") return "";
AnsiString out = "";
AnsiString sotni [9] =
{"Hundred", "two hundred", "three hundred", "four hundred", "five hundred",
"Six hundred", "seven hundred", "eight hundred", "nine hundred"};
AnsiString dubl [10] =
{"Ten", "eleven", "twelve", "thirteen", "fourteen",
"Fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
AnsiString des [8] =
{"Twenty", "thirty", "forty", "fifty",
"Sixty", "семьдясят", "восемьдясят", "ninety"};
AnsiString ed [9] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
AnsiString edj [9] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
AnsiString ind [5] = {"", "thousand", "million", "billion", "trillion"};
AnsiString post;
if (in [1]! = ' ') if (in [1]! = ' 0 ')
{out = out + sotni [StrToInt (in [1])-1];}
if (in [2] == ' 1 ')
{out = out + "" + dubl [StrToInt (in [3])];}
if (in [2]! = ' 1 ') if (in [2]! = ' ') if (in [2]! = ' 0 ')
{out = out + "" + des [StrToInt (in [2])-2];}
if (in [3]! = ' 0 ') if (in [2]! = ' 1 ')
{
if (tn == 1)
out = out + "" + edj [StrToInt (in [3])-1];
if (tn! = 1)
out = out + "" + ed [StrToInt (in [3])-1];
}
if (tn> 0) if (in [2]! = ' 1 ')
{
if (tn == 1) switch (in [3])
{
case ' 1 ': post = ind [tn] + "and"; break;
case ' 2 ': post = ind [tn] + "and"; break;
case ' 3 ': post = ind [tn] + "and"; break;
case ' 4 ': post = ind [tn] + "and"; break;
default: post = ind [tn] + ""; break;
}
if ((tn == 2) || (tn == 3) || (tn == 4)) switch (in [3])
{
case ' 1 ': post = ind [tn] + ""; break;
case ' 2 ': post = ind [tn] + "and"; break;
case ' 3 ': post = ind [tn] + "and"; break;
case ' 4 ': post = ind [tn] + "and"; break;
default: post = ind [tn] + "ов"; break;
}
}
else
{
switch (tn)
{
case 1 : post = ind [tn]; break;
default: post = ind [tn] + "ов"; break;
}
}
out = out + post;
return out;
}
AnsiString summa (AnsiString in)
{
AnsiString out;
AnsiString trs [5];
AnsiString tro [5];
AnsiString buf;
int n, s;
div_t dr;
while (in. Length () <15)
{
in = "" + in;
}
for (n=0; n <5; n ++) trs [n] = in;
trs [0] = trs [0].Delete (1, in. Length ()-3);
trs [1] = trs [1].Delete (1, in. Length ()-6).Delete (4,4);
trs [2] = trs [2].Delete (1, in. Length ()-9).Delete (4,6);
trs [3] = trs [3].Delete (1, in. Length ()-12).Delete (4,9);
trs [4] = trs [4].Delete (1, in. Length ()-15).Delete (4,12);
for (n=0; n <5; n ++)
{
tro [n] = triada (trs [n], n);
}
out = "" +tro [4] + "" +tro [3] + "" +tro [2] + "" +tro [1] + "" +tro [0] + "";
out = out. Trim ();
return out;
}
//--------------------------------------------------------------------------------------
///summa.h
Works so:AnsiString s = summa ("123");
|