【发布时间】:2023-04-10 12:28:01
【问题描述】:
这是我上一个问题的后续。我的代码要求用户输入数字的数字作为字符数组,以输出单词形式的数字。例如输入“2、13、20、54”输出“二、十三、二十、五十四”。该代码仅适用于小于 100 的数字,并且由于输入的是字符数组,因此如果输入了任何 3 位或更多位的数字,则会出现错误消息,通知用户该数字大于或等于 100。是反正有使用这个代码做相反的事情吗?例如,如果用户输入“六十一”,则输出将是“61”,如果用户输入“一百二十七”,则输出将是错误消息,因为该数字大于九十九。我用这个https://www.geeksforgeeks.org/convert-number-to-words/ 开始我的工作,我遇到的大多数其他解决方案都是在 python 中,我没有经验,但我的作业需要 C 中的解决方案。无论如何,是否可以为相应的字符串分配整数值?如“一:1、十一:11、二十:20等”我是否必须在我的代码中包含“数百、数千、数百万等”,或者如果检测到字符串不是我已经列出的表示数字大于 99 的字符串,我的代码是否有办法抛出错误?比如我输入“一千六百五十”,因为“千”和“百”没有出现在singledig、doubledig或multiplesoften中,这说明数字太大了?我怀疑需要一个循环来遍历输入字符串来检测这一点,但是我将如何使用我的输入创建一个字符串数组?
#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;
}
【问题讨论】:
-
如果您只需要识别完美、精确的匹配,您可以遍历所有 100 种可能性并进行比较。