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

时间:2012-04-10 13:03:25

标签: c algorithm

问题是编写一个程序,该程序接受来自终端的键控整数,并以英语提取并显示整数的每个数字。所以,如果用户键入932,程序应显示'九三二'..

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

是否还有其他算法(更短,更有效)?

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

4 个答案:

答案 0 :(得分:5)

如果输入带有fgets等字符串

,则可以跳过所有mod处理/反转

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

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

fgets(buffer, 80, stdin)

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

答案 1 :(得分:0)

您应该按照注释和Pavan的建议处理字符串,但是如果给出十进制的整数,您可以通过以下方式提取nth数字:

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

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

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

答案 2 :(得分:0)

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

#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;
}

答案 3 :(得分: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;
}