Преобразовать число из входной строки в словесную форму - 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;
}

Объяснение кода листинга программы

  1. В начале программы подключаются необходимые библиотеки для работы с потоками ввода-вывода и строками.
  2. Далее, объявляются массивы строк для хранения числовых обозначений от 0 до 999.
  3. Затем, в основной функции программы main(), инициализируются переменные num, hundred, ten и unit, которые будут использоваться для хранения и обработки числового значения, введенного пользователем.
  4. С помощью функции cin вводится числовое значение.
  5. Переменная hundred содержит целую часть числа, деленного на 100.
  6. Переменная ten содержит целую часть числа, деленного на 10 (остаток от деления на 100), и затем деленную на 10.
  7. Переменная unit содержит остаток от деления числа на 10 (после деления на 100 и 10).
  8. В зависимости от значения переменной hundred, выводится соответствующее числовое обозначение из массива hundreds.
  9. Если значение переменной ten больше 1, то выводится соответствующее числовое обозначение из массива tens.
  10. Если значение переменной ten равно 1 и значение переменной unit больше 1, то выводится соответствующее числовое обозначение из массива teun.
  11. Если значение переменной ten больше 1 или равно 0, то выводится соответствующее числовое обозначение из массива units, равное значению переменной unit.
  12. В конце программы вызывается функция getch(), которая ожидает нажатия клавиши, и функция main() возвращает 0, завершая программу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы