Это продолжение моего предыдущего вопроса. Код, который у меня есть, просит пользователя ввести цифры числа в виде массива символов для вывода числа в его словесной форме. Например, входы «2, 13, 20, 54» выходят «два, тринадцать, двадцать, пятьдесят четыре». Код работает только для чисел меньше 100, и, поскольку ввод представляет собой массив символов, при вводе любого числа из 3 или более цифр отображается сообщение об ошибке, уведомляющее пользователя о том, что число больше или равно 100. Is есть ли способ использовать этот код, чтобы сделать обратное? Например, если пользователь вводит «шестьдесят один», на выходе будет «61», а если пользователь вводит «сто двадцать семь», на выходе будет сообщение об ошибке, поскольку это число больше девяноста девяти. Я использовал этот https://www.geeksforgeeks.org/convert-number-to-words/, чтобы начать свою работу, и большинство других решений, с которыми я столкнулся, находятся в python, и у меня нет опыта, но мое задание требует решения в C. Есть ли способ присвоить целочисленные значения соответствующим строкам? например "один: 1, одиннадцать: 11, двадцать: 20, и т. д. c." Должен ли я включать в свой код «сотни, тысячи, миллионы и т. Д. c» или есть способ для моего кода выдать ошибку, если обнаруживаются строки, отличные от тех, которые я уже перечислил, чтобы указать, что число больше чем 99? Например, если я ввожу «одна тысяча шестьсот пятьдесят», так как «тысяча» и «сотня» не появляются в singleledig, doubledig или multiplesoften, это означает, что число слишком велико? Я подозреваю, что al oop потребуется go через строку ввода, чтобы обнаружить это, но как мне go создать массив строк с использованием моего ввода?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void convertnumtostring(char *num){
int len = strlen(num);
if(len==0){
fprintf(stderr, "empty string\n");
return;
}
if(len>2){
fprintf(stderr, "number is is equal to or greater than 100\n");
return;
}
char *singledig[]={"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
char *doubledig[]={"", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
char *multiplesoften[]={"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
printf("\n%s: ", num);
if(len==1){
printf("%s\n", singledig[*num - '0']);
return;
}
if(*num == '1'){
int sum = *num - '0' + *(num + 1)- '0';
printf("%s\n", doubledig[sum]);
return;
} else if(*num == '2' && *(num + 1) == '0'){
printf("twenty\n");
return;
} else {
int i = *num - '0';
printf("%s ", i? multiplesoften[i]: "");
++num;
if(*num != '0')
printf("%s ", singledig[*num - '0']);
}
}
int main(void){
char input[10];
printf("Enter a number: ");
scanf("%s", input);
convertnumtostring(input);
return 0;
}