【问题标题】:add a space every x characters in char array in C在C中的char数组中每x个字符添加一个空格
【发布时间】:2020-05-12 14:47:37
【问题描述】:

我正在制作一个给定 int 的函数,使其二进制补码并将其转换为 32 位数字

问题是我想每 4 位添加空间

程序示例是“输入 720,输出:0000 0000 0000 0000 0000 0010 1101 0000”

我尝试制作该函数,但我不知道如何每 4 个数字添加一个“”字符。

有什么想法吗?

我的功能是:

char temp[32];
char* toBinary(int num) {
    int mask = 1 << (31);
    char res[39];
    for (short i = 0; i <=32; i++) {
       res[i] = (num & mask ? '1' : '0');
        num <<= 1; 
        if(i !=0 && i % 4 ==0) // push a space ;
    }
    return strcpy(temp,res);
}

谢谢!

【问题讨论】:

  • 在你的循环中加入一个计数器。输出一个数字后,计数器递增。如果计数器为 4,则将其重置为 0 并打印一个空格。还有其他方法。但是在temp 中,您需要超过 32 个字符。
  • @Jabberwocky 你好,你能解释一下吗?谢谢
  • 你面前排着二十个人。你想给每四个人一美元。你会怎么做?你数他们 1,2,3,4 给一美元,1,2,3,4 给一美元,1,2,3,4 给一美元等等。

标签: c


【解决方案1】:

首先返回一个全局变量不好。从 C 语言的角度来看没有错,但你真的没有理由这样做。惯用的方法是让调用者提供 char 数组,或者如果您不需要线程安全来返回静态数组。

接下来,您需要一个用于终止 null 的位置,因此大小必须为 40 而不是 39。

最后,您可以迭代 for (short i=0; i&lt;40; i++) 并在每四个字符后添加一个空格。代码可能变成:

char* toBinary(int num) {
    int mask = 1 << (31);
    static char res[40] = {0};
    for (short i = 0; i < 39; i++) {
        res[i] = (num & mask ? '1' : '0');
        num <<= 1; 
        if(i % 5 == 3) res[++i] = ' ' ;  // the trick: increment i and write a space
    }
    res[39] = '\0';   // never forget the terminating null when building a string
    return res;
}

【讨论】:

  • 这真的让我很开心!谢了哥们!代码运行良好!
猜你喜欢
  • 2011-01-05
  • 2013-07-15
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2014-04-17
  • 2013-12-13
  • 2014-01-02
  • 1970-01-01
相关资源
最近更新 更多