C - Int数组到具有混合数字的整数

时间:2018-03-24 00:18:53

标签: c arrays

我需要将大小为4的整数数组转换为int。我已经看到int数组看起来像{1,2,3,4}的解决方案变成了1234,我也看到了类似{10,20,30}的数组会变成102030.但是,我的问题是我有一个看起来像{0,6,88,54}的数组,我之前提到的解决方案只适用于int s的数组相同的类型{例如,所有一位数或全部两位数}。

我该怎么做才能解决这个问题?

{0,6,88,54}数组的预期输出为68854。

Examples中间的零输出应该保留它们,即{6,0,0,8}将是6008但默认情况下{0,6,0,0,8}仍然是{以6008形式{1}}我在int中需要这个,但我不介意有一个字符串中间。

3 个答案:

答案 0 :(得分:2)

你可以这样做:

int res = 0;
int nums[4] = {1, 4, 3, 2}

int i = 0, temp;
for (i = 0; i < 4; ++i) {
  temp = nums[i];
  do {
    res *= 10;
  } while ((temp /= 10) > 0);


  res += nums[i];
}

答案 1 :(得分:2)

一个简洁的解决方案可能是打印到字符串然后将字符串转换回整数

char dummy[100];
int answer;
int input[4];

....

sprintf(dummy,"%d%d%d%d",input[0],input[1],input[2],input[3]);
answer=atoi(dummy);

sprintf将整数打印成字符串

atoi将字符串转换为整数,并且应该能够在前面处理0

完整计划

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char dummy[100];
  int answer;
  int input[4]={3,4,0,345};

  sprintf(dummy,"%d%d%d%d",input[0],input[1],input[2],input[3]);
  answer=atoi(dummy);

  printf("%d\n",answer);

  return 0;
}

答案 2 :(得分:2)

这个解决方案怎么样?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int arr[] = {0, 6, 88, 54};

    char buffer[1000] = { 0 };

    for(size_t i = 0; i < sizeof arr / sizeof *arr; ++i)
        sprintf(buffer, "%s%d", buffer, arr[i]);

    int val = strtol(buffer, NULL, 10);
    printf("%d\n", val);

    return 0;
}

int打印608854