Прога заменяет число прописью.....
Но компилятор говорит:
error C2668: 'insert' : ambiguous call to overloaded function
Error executing cl.exe.
А вот и прога..
#include <string>
#include <iostream>
std::string triada(const std::string& in, int tn)
{
if (in == " ") return "";
if (in == "000") return "";
static std::string sotni[9] =
{"сто", "двести", "триста", "четыреста", "пятьсот",
"шестьсот", "семьсот", "восемьсот", "девятьсот"};
static std::string dubl[10] =
{"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать",
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"};
static std::string des[8] =
{"двадцать", "тридцать", "сорок", "пятьдесят",
"шестьдесят", "семьдясят", "восемьдясят", "девяносто"};
static std::string ed[9] = {"один", "два", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
static std::string edj[9] = {"одна", "две", "три", "четыре", "пять", "шесть","семь", "восемь", "девять"};
static std::string ind[5] = {"", " тысяч", " миллион", " миллиард", " триллион"};
std::string out;
std::string post;
// количество сотен, если есть
if (in[0] != ' ' && in[0] != '0')
{
out = out + sotni[in[0]-'1'];
}
// случай 10-19 в двузначной части числа
if (in[1] == '1')
{
out = out + " " + dubl[in[2]-'0'];
}
// десятки 20-90
if (in[1] != '1' && in[1] != ' ' && in[1] != '0')
{
out = out + " " + des[in[1]-'2'];
}
// единицы
if (in[2] != '0' && in[1] != '1')
{
// если кол-во тысяч то используем другое окончание
if (tn == 1)
out = out + " " + edj[in[2]-'1'];
else
out = out + " " + ed[in[2]-'1'];
}
// добавляем приписку о тысячах, миллионах и т.д.
if (tn > 0)
{
if (in[1] != '1')
{
// если 20-90 десятков
// окончания для тысяч
if (tn == 1)
switch (in[2])
{
case '1': post = ind[tn] + "а"; break; // xx1
case '2': post = ind[tn] + "и"; break; // хх2
case '3': post = ind[tn] + "и"; break; // хх3
case '4': post = ind[tn] + "и"; break; // хх4
default : post = ind[tn] + ""; break; // хх5-хх9
}
// окончания для миллионов и далее
if ((tn==2)||(tn==3)||(tn==4))
switch (in[2])
{
case '1': post = ind[tn] + ""; break; // xx1
case '2': post = ind[tn] + "а"; break; // хх2
case '3': post = ind[tn] + "а"; break; // хх3
case '4': post = ind[tn] + "а"; break; // хх4
default : post = ind[tn] + "ов"; break;// хх5-хх9
}
}
else
{
// случай 10-12 в двузначной части
switch (tn)
{
case 1 : post = ind[tn]; break; // тысячи
default : post = ind[tn] + "ов"; break; // миллионы и далее
}
}
}
out = out + post;
return out;
}
std::string summa(std::string in)
{
std::string out;
std::string trs[5];
std::string tro[5];
int n;
// дополняем in в начале нулями до 15 знаков
in.insert(0, 15-in.length(), ' ');//////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!Вот здесь он //кричит
// вставляем в trs[] части строки из in
trs[0].insert(trs[0].begin(), in.c_str()+12, in.c_str()+15);
trs[1].insert(trs[1].begin(), in.c_str()+9, in.c_str()+12);
trs[2].insert(trs[2].begin(), in.c_str()+6, in.c_str()+9);
trs[3].insert(trs[3].begin(), in.c_str()+3, in.c_str()+6);
trs[4].insert(trs[4].begin(), in.c_str(), in.c_str()+3);
// получаем части числа
for (n=0;n<5;n++)
{
tro[n] = triada(trs[n], n);
}
// собираем число
out = tro[4]+" "+tro[3]+" "+tro[2]+" "+tro[1]+" "+tro[0];
return out;
}
int main()
{
std::string s = summa("243101812002031");
setlocale(LC_ALL, "Russian");
std::cout << s << std::endl;
}
i need help
Изменил(а) Kest, 08-09-2010 11:27 |