繁体   English   中英

在 C 中转换输入数字字符串

[英]Converting input numerical string in C

问题是编写一个程序,从终端输入 integer,然后提取并用英文显示 integer 的每个数字。 所以,如果用户输入 932,程序应该显示“九三二”。

我的算法是先反转数字,使 932 变成 239。现在我使用 mod 运算符提取最后一位数字并打印。 接下来我将数字除以 10,然后再次提取最后一位数字,依此类推......

是否有任何其他算法(更短和高效)可能?

可以提取integer的最后一位数字。是否可以提取第一位数字等等?

如果您使用fgets等输入字符串,则可以跳过所有 mod 处理/反转

这些线上的东西(我没有错误检查,它只是一个伪代码)

char *numArray[]={"One", "Two", ....};

fgets(buffer, 80, stdin)

while ( buffer[i] )
{
    printf("%s ", numArray[buffer[i]-'0'])
    i++;
}

您实际上应该按照评论和 Pavan 的建议处理字符串,但是给定以 10 为基数的 integer,您可以通过以下方式提取第nth数字:

floor( (a % (10**n)) / (10**(n-1)) )

其中**是指数( C <math.h>中的pow )。 如果您碰巧在不同的基地b工作,这仍然有效:

floor( (a % (b**n)) / (b**(n-1)) )

所以,在阅读了这些帖子之后,我会把它写成如下:

#include <stdio.h>
#include <string.h>

char bar(char foo) {
    char *bar[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    return foo <= '9' && foo >= '0'? printf("%s", bar[foo - '0']) : 0;
}

int main (int argc, char const *argv[]) {
    char buf[128];
    int len;

    printf("Give input: ");
    fgets(buf, 128, stdin);

    for(len = 0; buf[len]; len++) {
        if(bar(buf[len]))
            printf("\n");
    }
    return 0;
}
#include <stdio.h>

void print(int n){
    static char *digit_name[] = {"zero","one","two","three","four","five","six","seven","eight","nine" };
    int q = n / 10;
    int r = n % 10;
    if(q != 0){
        print(q);
        putchar(' ');
    }
    printf("%s",digit_name[r]);
}

int main(void){
    print(932);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM