Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中转换输入数字字符串_C_Algorithm - Fatal编程技术网

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

在C语言中转换输入数字字符串,c,algorithm,C,Algorithm,问题是编写一个程序,从终端输入一个整数,提取并用英语显示整数的每个数字。因此,如果用户键入932,程序应显示“九三二” 我的算法是先倒数932变成239。现在我使用mod运算符提取最后一个数字并打印。接下来,我将数字除以10,然后再次提取最后一个数字,依此类推 是否有其他可能的算法(更短、更高效) 可以提取整数的最后一位。是否可以提取第一个数字等?如果您使用fgets等输入字符串,则可以跳过所有mod处理/反转 这些行中有一些内容(我没有检查错误,只是一个伪代码) 如果使用fgets等输入字符串

问题是编写一个程序,从终端输入一个整数,提取并用英语显示整数的每个数字。因此,如果用户键入932,程序应显示“九三二”

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

是否有其他可能的算法(更短、更高效)


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

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

这些行中有一些内容(我没有检查错误,只是一个伪代码)


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

这些行中有一些内容(我没有检查错误,只是一个伪代码)


实际上,您应该按照注释和Pavan的建议处理字符串,但是如果给定一个以十为底的整数,您可以通过以下方式提取第n个数字:

floor( (a % (10**n)) / (10**(n-1)) )
其中,
**
是指数(
pow
在C
中)。如果您碰巧在不同的基地工作,这仍然有效:

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

实际上,您应该按照注释和Pavan的建议处理字符串,但是如果给定一个以十为底的整数,您可以通过以下方式提取第n个数字:

floor( (a % (10**n)) / (10**(n-1)) )
其中,
**
是指数(
pow
在C
中)。如果您碰巧在不同的基地工作,这仍然有效:

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;
}
#包括
#包括
字符条(字符foo){
字符*条[]={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
返回foo='0'?printf(“%s”,bar[foo-'0']):0;
}
int main(int argc,char const*argv[]{
char-buf[128];
内伦;
printf(“给出输入:”);
fgets(buf、128、stdin);
for(len=0;buf[len];len++){
if(巴(立方英尺[长度])
printf(“\n”);
}
返回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;
}
#包括
#包括
字符条(字符foo){
字符*条[]={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
返回foo='0'?printf(“%s”,bar[foo-'0']):0;
}
int main(int argc,char const*argv[]{
char-buf[128];
内伦;
printf(“给出输入:”);
fgets(buf、128、stdin);
for(len=0;buf[len];len++){
if(巴(立方英尺[长度])
printf(“\n”);
}
返回0;
}
#包括
无效打印(int n){
静态字符*数字名称[]={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
int q=n/10;
int r=n%10;
如果(q!=0){
印刷品(q);
putchar(“”);
}
printf(“%s”,数字名称[r]);
}
内部主(空){
印刷品(932);
返回0;
}
#包括
无效打印(int n){
静态字符*数字名称[]={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
int q=n/10;
int r=n%10;
如果(q!=0){
印刷品(q);
putchar(“”);
}
printf(“%s”,数字名称[r]);
}
内部主(空){
印刷品(932);
返回0;
}

为什么不使用
fgets/fgetc
获取用户输入?无需倒车、改装等,只需读出!您的算法如何处理120?为什么不将数字作为字符串读取并跳过整个mod操作?提取以10为基数的无符号整数的最后一个数字将是'n%10'。瞧!为什么不使用
fgets/fgetc
获取用户输入?无需倒车、改装等,只需读出!您的算法如何处理120?为什么不将数字作为字符串读取并跳过整个mod操作?提取以10为基数的无符号整数的最后一个数字将是'n%10'。瞧!我会制作一个数组
arrNums[10]={“零”、“一”、“九”},然后就是
printf(“%s”,arrNums[buffer[i]-“0”)
@Yuri谢谢Yuri,我采纳了你的建议。在你的建议中,你有一个字符数组,你需要一个字符串数组,所以
char*numaray[]
我会制作一个数组
arrNums[10]={“零”,“一”,“九”},然后就是
printf(“%s”,arrNums[buffer[i]-“0”)
@Yuri谢谢Yuri,我采纳了你的建议。在你的建议中,你有一个字符数组,你需要一个字符串数组,所以
char*numaray[]