C语言 如何在空数组中从末尾向开头添加元素?

z9zf31ra  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(216)

我碰到了理论问题,这并不让我解决我的任务。
我有一个算法,可以把十进制转换成二进制。它看起来像这样:
1.我们有一个十进制65。

  1. 65%2 = 32(余数为1),32%2 = 16(余数为0),等等,直到我们得到1。它只是“1”。
    1.所以现在我有这样的东西:“1000001”是从最后一个带提示的除法写到第一个除法的。我必须把它加到空数组中。但是我找不到如何把数组中的元素从末尾加到开头的信息。
xqkwcwgp

xqkwcwgp1#

...将数组中的元素从末尾添加到开头。
在C语言中,一个 array 一旦被声明就不能改变大小。通过int到二进制文本的字符串,我们知道所需的最大数组大小。现在,让我们假设它是12。
设置指向数组末尾的索引。
%2循环中,递减索引以从结尾到开头工作。

#define N 12
char buf[N];
int index = N-1;
buf [index] = '\0';  // Assign the last element of the array.
int negative = num < 0;    

do {
  int digit = num%2;
  buf[--i] = abs(digit) + '0'; // Assign the previous array element.
  num /= 2;
} while (num);

if (negative) {
  buf[--i] = '-';
}     

printf("<%s>\n", buf + i);

请注意,初始数组元素不用于num的小值。
备选方案:我们可以使用memmove()将字符串移到数组的第一部分。或者循环num两次,第一次查找所需的数组大小,然后使用大小合适的数组填充它。我们可以从数组的开头填充(最低有效位在前),然后反转字符串。
C2x的下一个版本中,我们可能只需要执行snprint(array, sizeof array, "%b", num);

相关问题