Консультация № 168520
29.05.2009, 21:05
0.00 руб.
0 2 1
подскажите пожалуйста как составить строковую функцию num_to_str(n), где n-целое число(|n|<1000) возвращаемое значение должно быть строкой, в которой число n представлено словами.

Я нашёл вот такой код, но похоже это не то...

Приложение:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>

const MAX=256;

char str[10][MAX]={"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать",
"пятнадцать", "шестнадцать", "семнадцать", "восемнадцать","девятнадцать"};
char str2[9][MAX]={"сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот",
"восемьсот","девятьсот"};
char str3[8][MAX]={"двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят",
"семьдесят","восемьдесят","девяносто"};
char str4[9][MAX]={"одна тысяча","две тысячи","три тысячи","четыре тысячи","пять тысяч",
"шесть тысяч","семь тысяч","восемь тысяч","девять тысяч"};
char str5[9][MAX]={"один","два","три","четыре","пять","шесть","семь","восемь",
"девять"};

void printstr(char* string)
{
int l=strlen(string);
char s[MAX]="";
for(int i=0, k=l;i<l;i++,k--)
{
switch(k)
{
case 6:
strcat(s, str2[string[i]-49]);
break;
case 5:
if(string[i]>'1')
{
strcat(s, " ");
strcat(s, str3[string[i]-50]);
}
break;
case 4:
if(string[i]=='0' && string[i-1]=='0')
{
strcat(s, " тысяч");
continue;
}
if(string[i-1]!='1')
{
strcat(s, " ");
strcat(s, str4[string[i]-49]);
}
else
{
strcat(s, " ");
strcat(s, str[string[i]-48]);
strcat(s, " тысяч");
}
break;
}
}
CharToOem(s, s);
printf("%s\n", s);
}

int main(int argc, char* argv[])
{
printstr("605666");
return 0;
}

Обсуждение

Неизвестный
30.05.2009, 10:45
общий
это ответ
Здравствуйте, Алексей3791.

По - моему вот так больше подходит к условию

Приложение:
const MAX=256;

char str[19][MAX]={"один","два","три","четыре","пять","шесть","семь","восемь",
"девять","десять", "одиннадцать", "двенадцать", "тринадцать",
"четырнадцать", "пятнадцать", "шестнадцать", "семнадцать",
"восемнадцать","девятнадцать"};

char str10[8][MAX]={"двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят",
"семьдесят","восемьдесят","девяносто"};

char str100[9][MAX]={"сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот",
"восемьсот","девятьсот"};

char str1000[9][MAX]={"одна тысяча","две тысячи","три тысячи","четыре тысячи","пять тысяч",
"шесть тысяч","семь тысяч","восемь тысяч","девять тысяч"};

char *num_to_str(int num)
{
char s[MAX]="";
if (num > 9999 || num < 1)
{
CharToOEm("Ошибка ввода число больше 9999 или меньше 1.", s);
return *s;
}

pos = num / 1000;
if (pos > 0)
{
strcat(s, str1000[pos - 1]);
strcat(s, " ");
num %= 1000;
}
pos = num /100;
if (pos > 0)
{
strcat(s, str100[pos - 1]);
strcat(s, " ");
num %= 100;
}
pos = num / 10;
if (pos > 1)
{
strcat(s, str10[pos - 2]);
strcat(s, " ");
num %= 10;
}
if (num > 0)
strcat(s, str[num - 1]);
CharToOem(s, s);
return s;
}

int main(int argc, char* argv[])
{
printf("%s", num_to_str(1234));
return 0;
}
3
k:\ïðîãðàììèðîâàíèå\mine\mine\kurs\kursovic\krac.cpp(27) : error C2065: 'CharToOEm' : undeclared identifier<br>k:\ïðîãðàììèðîâàíèå\mine\mine\kurs\kursovic\krac.cpp(28) : error C2440: 'return' : cannot convert from 'char' to 'char *'<br>почему у меня не запускается?
Неизвестный
30.05.2009, 18:51
общий
k:\ïðîãðàììèðîâàíèå\mine\mine\kurs\kursovic\krac.cpp(27) : error C2065: 'CharToOEm' : undeclared identifier
k:\ïðîãðàììèðîâàíèå\mine\mine\kurs\kursovic\krac.cpp(28) : error C2440: 'return' : cannot convert from 'char' to 'char *'
а подскажите пожалуйста как исправить такие ошибки? у меня не запускается(
Форма ответа