为字符串中的每个第 N 个字符插入 space 的函数没有按我认为的方式工作?

Function that inserts a space for every Nth character in a string isn't working the way I think it should?

需要说明的是,我知道有针对实际代码的解决方案可以产生我正在寻找的结果,但这不是我关心的问题。我担心为什么我 已经编写的代码 没有产生所需的输出。

我写了这个函数:

string ToBinary(int val, int space)
{
    string str = "";
    int tmp = int(val), num = 0;
    for (int i = INT_SIZE; i > 0; i--)
    {
        str = char((int(tmp & 1) + '0')) + str;
        tmp >>= 1;
    }
  for (int i = 1; i < str.size(); i++)
  {
    if (i % space == 0)
    {
      str.insert((i-num)," "); // num -starting at 0- is the number of spaces in the string
      num++;
    }
  }
    return str;
}

所以这个函数应该取一个整数并将其转换为二进制字符串,然后取该字符串并遍历每个数字,同时在 space 的每个间隔插入一个 space . (在本例中是 4)所以我这样称呼它,printf("%s", ToBinary(0,4).c_str());(0 是包含整数的数组的第一个元素)。

第一个元素是数字 0,所以输出应该是 0000 0000 0000 0000 0000 0000 0000 0000,但实际上是 0000 00 00 00 00 00 00 00 00 00 0000000000,我不确定为什么?

编辑:我相信我是这样修复代码的:

string ToBinary(int val, int space)
{
    string str = "";
    int tmp = int(val);
    for (int i = INT_SIZE; i > 0; i--)
    {
        str = char((int(tmp & 1) + '0')) + str;
        tmp >>= 1;
        if (i % space == 0)
        {
            str.insert(i-(i-1)," ");
        }
    }
    return str;
}

我完全取消了第二个 for 循环,而是决定在第一个循环中修改 str。我不完全确定为什么这会产生所需的输出,而不是发布代码的第一个实例,所以如果有人知道我会喜欢答案!

您需要添加 num 而不是减去。更改之后,您还需要防止插入超出字符串长度的空格。此代码似乎有效

for (int i = 1; i + num < str.size(); i++)
{
    if (i % space == 0)
    {
        str.insert((i+num)," "); // num -starting at 0- is the number of spaces in the string
        num++;
    }
}

尽管它是一些棘手的代码。我不确定我是否信任它。