Преобразовать число из входной строки в словесную форму - C (СИ)
Формулировка задачи:
Необходимо найти ошибку в программе на СИ / C (Си)
Помогите пожалуйста найти ошибку в программе. Задание было преобразовать число из входной строки в словесную форму (числа от 0 до 1000). Но на выходе программа выдает набор символов вместо ожидаемого результата.
Код C
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> #include <ctype.h> char* getSotni(char x1) { char s[11] = "\0"; switch (x1) { case '1': strcpy(s,"sto"); break; case '2': strcpy(s,"dvesti"); break; case '3': strcpy(s,"trista"); break; case '4': strcpy(s,"chetiresta"); break; case '5': strcpy(s,"piatsot"); break; case '6': strcpy(s,"shestsot"); break; case '7': strcpy(s,"semsot"); break; case '8': strcpy(s,"vosemsot"); break; case '9': strcpy(s,"devatsot"); break; default: break; } return s; } char* GetDeciatki(char x2, char x3) { char s[15] = "\0"; switch (x2) { case 1: switch (x3) { case '0': strcpy(s, "ten"); break; case '1': strcpy(s,"eleven"); break; case '2': strcpy(s,"twelve"); break; case '3': strcpy(s,"thirteen"); break; case '4': strcpy(s,"fourteen"); break; case '5': strcpy(s,"fifteen"); break; case '6': strcpy(s,"sixteen"); break; case '7': strcpy(s,"seventeen"); break; case '8': strcpy(s,"eighteen"); break; case '9': strcpy(s,"nineteen"); break; default: break; } break; case '2': strcpy(s,"twenty"); break; case '3': strcpy(s,"thirty"); break; case '4': strcpy(s,"fourty"); break; case '5': strcpy(s,"fifty"); break; case '6': strcpy(s,"sixty"); break; case '7': strcpy(s,"seventy"); break; case '8': strcpy(s,"eighty"); break; case '9': strcpy(s,"ninety"); break; default: break; } return s; } char* getEdin(char x3) { char s[11] = "\0"; switch (x3) { case '1': strcpy(s,"one"); break; case '2': strcpy(s,"two"); break; case '3': strcpy(s,"three"); break; case '4': strcpy(s,"four"); break; case '5': strcpy(s,"five"); break; case '6': strcpy(s,"six"); break; case '7': strcpy(s,"seven"); break; case '8': strcpy(s,"eight"); break; case '9': strcpy(s,"nine"); break; default: break; } return s; } char* getString(char* a) { char a1, a2, a3; int x = 0; x = atoi(a); if(strcmp(a,"0")==0) return "zero"; else if (strcmp(a,"1000")==0) return "tysiacha"; else { if ((x<=0) || (x>1000)) { return "Error. Wrong number."; } else { if(x<10) { a1=0; a2=0; a3=a[0]; } else if(x>=10&&x<100) { a1=0; a2=a[0]; a3=a[1]; } else { a1=a[0]; a2=a[1]; a3=a[2]; } } } char* sotni = getSotni(a1); printf("%s",sotni); char* dec = GetDeciatki(a2,a3); printf("%s",dec); /*if(a2!='1') { char* edin = getEdin(a3); printf("%s",edin); }*/ if(a2=='1') return strcat(getSotni(a1),GetDeciatki(a2,a3)); else return strcat(strcat(getSotni(a1),GetDeciatki(a2,a3)),getEdin(a3)); return a; } void main() { char a[5] = "\0"; puts("Enter number: "); gets(a); puts(getString(a)); //getString(a); getchar(); }
Решение задачи: «Преобразовать число из входной строки в словесную форму»
textual
Листинг программы
#include <iostream> #include <string> #include "conio.h" using namespace std; int main() { string units[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"}; string tens[8] = {"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"}; string hundreds[10] = {"one hundred","two hundreds","three hundreds","four hundreds","five hundreds","six hundreds","seven hundreds","eight hundreds","nine hundreds"}; string teun[9] = {"eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; int num=0; cin>>num; int hundred = num/100; int ten = num/10%10; int unit = num%10; if(hundred) cout<<hundreds[hundred-1]<<" "; if(ten>1) { cout<<tens[ten-2]<<" "; } else if(ten==1) cout<<teun[unit-1]<<endl; if(ten>1 || ten==0)cout<<units[unit]; getch(); return 0; }
Объяснение кода листинга программы
- В начале программы подключаются необходимые библиотеки для работы с потоками ввода-вывода и строками.
- Далее, объявляются массивы строк для хранения числовых обозначений от 0 до 999.
- Затем, в основной функции программы
main()
, инициализируются переменныеnum
,hundred
,ten
иunit
, которые будут использоваться для хранения и обработки числового значения, введенного пользователем. - С помощью функции
cin
вводится числовое значение. - Переменная
hundred
содержит целую часть числа, деленного на 100. - Переменная
ten
содержит целую часть числа, деленного на 10 (остаток от деления на 100), и затем деленную на 10. - Переменная
unit
содержит остаток от деления числа на 10 (после деления на 100 и 10). - В зависимости от значения переменной
hundred
, выводится соответствующее числовое обозначение из массиваhundreds
. - Если значение переменной
ten
больше 1, то выводится соответствующее числовое обозначение из массиваtens
. - Если значение переменной
ten
равно 1 и значение переменнойunit
больше 1, то выводится соответствующее числовое обозначение из массиваteun
. - Если значение переменной
ten
больше 1 или равно 0, то выводится соответствующее числовое обозначение из массиваunits
, равное значению переменнойunit
. - В конце программы вызывается функция
getch()
, которая ожидает нажатия клавиши, и функцияmain()
возвращает 0, завершая программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д