簡體   English   中英

如何將 C 中的字數轉換為整數?

[英]How can I convert word numbers to ints in C?

這是我上一個問題的后續。 我的代碼要求用戶將數字的數字作為字符數組輸入到 output 數字形式的數字。 例如輸入“2、13、20、54”output“二、十三、二十、五十四”。 該代碼僅適用於小於 100 的數字,並且由於輸入的是字符數組,因此如果輸入任何 3 位或更多位的數字,則會出現錯誤消息,通知用戶該數字大於或等於 100。是反正有使用這個代碼做相反的事情嗎? 例如,如果用戶輸入“61”,則 output 將為“61”,如果用戶輸入“127”,則 output 將是錯誤消息,因為該數字大於 99。 我使用這個https://www.geeksforgeeks.org/convert-number-to-words/開始我的工作,我遇到的大多數其他解決方案都在 python 中,我沒有經驗,但我的任務需要 Z01D2F870F83470ZCADE4 中的解決方案. 無論如何將 integer 值分配給相應的字符串? 如“一:1、十一:11、二十:20等” 我是否必須在我的代碼中包含“數百、數千、數百萬等”,或者如果檢測到字符串而不是我已經列出的表示數字大於 99 的字符串,我的代碼是否有辦法拋出錯誤? 比如我輸入“一千六百五十”,因為在singledig、doubledig或multiplesoften中沒有出現“thound”和“hundred”,這說明數字太大了? 我懷疑 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;   

}

不幸的是,我看不到任何其他方式可以解決這個問題。 對於您關於百萬和數千案例的問題,是的,您必須包括案例,如果該詞存在,您可以為該數字分配一個變量。 您可以做的一件事是根據間距將單詞分成不同的字符串。 這將使代碼更容易,然后使用 strcmp 進行比較。 例如:一百三十一。

str1 = one
str2 = hundred
str3 = and
str4 = thirty
str5 = one

strcmp(str1,result[i])

//result[i] 是一個二維數組,包含程序中所有可能的值。 您還需要遍歷這些案例。

同樣在二維數組中,您可以保持最可能的值首先出現。 即三十、四十等。

對於單個數字,您可以檢查 sting 的長度並避免此檢查並調用另一個 function 以便時間復雜度不會增加。 這是我能想到的一種解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM