在C语言中将整数转换为整数数组

3

如何将整数值转换为整数数组格式?

例如:

int answer = 140;

我希望得到的期望值是:
int arr_answer[] = { 1, 4, 0};

你事先知道 answer 中有多少位数字吗? - bejado
你是说你想要生成所需输出 int arr_answer[] = { 1, 4, 0}; 的源代码吗?请具体说明。 - Weather Vane
3个回答

2

如果您事先知道位数(在此例中为 3),可以按照以下方式进行:

#include <stdio.h>

int main()
{
    const int numDigits = 3;
    int answer = 140;
    int digits[numDigits];

    int i = numDigits - 1;
    while (answer > 0)
    {
        int digit = answer % 10;
        answer /= 10;
        digits[i] = digit;
        printf("digits[%d] = %d\n", i, digits[i]);
        i--;
    }

    return 0;
}

输出:

digits[2] = 0
digits[1] = 4
digits[0] = 1

0 4 1 is wrong. Fix your code. It should be 1 4 0 - Michi
@Michi,这不是错误,而是在反向填充数组。 - bejado
@bejado:整数的大小未给出...... 谢谢 - erickimme

1

一种选择是计算数字并使用可变长度数组1

#include <stdio.h>

int main(void){
    int ans = 140;
    int x = ans;
    size_t i, size = 0;

    while ( x ) {
       x=x/10;
       size++;
    }

    int arr_answer[size];

    for ( i = size - 1, x = ans ; x ; x = x/10, i-- ) {
       arr_answer[i] = x % 10;
    }

    for ( i=0 ; i < size ; i++ ) {
       printf("%d ", arr_answer[i]);
    }
}

显然,如果您可以使用足够大的固定大小数组,则无需计算size,因此避免了第一次循环。但这可能是唯一创建确切大小数组的方式。或者,如果数字的数量可能非常庞大(并且您需要以不同的方式存储它们-一个int只能容纳有限范围的值),您也可以使用malloc()(如果您不需要使用数组)来分配内存块。

1 自C99以来可用的VLA是C11中的可选功能。


0

我不是C程序员,所以无法提供具体的代码,但我建议尝试以下两种方法:1)将整数转换为字符串(谷歌建议使用sprintf()函数),2)运行一个for循环,遍历整数/字符串的长度并将其赋值给一个数组。我最终会做出类似于以下的代码:

integer_String = convertToString(integer)
for (integer_String.length()) {assign to array}

最好将其封装在一个返回数组的函数中。

编辑:无视我之前的回答,哈哈,其他答案更好。


如果您希望让人们忽略您的回答,您可以将其删除。 - bejado
1
我的意思是,它仍然可能会有用。我确实从问题的次优解中学到了很多东西;不同的可能性和方法。 - jylny
@jylyn 我同意,如果你想离开它,那么你不应该告诉人们忽略它,只需让它自己站立即可。 - bejado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接