为字符串中的每个第 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++;
}
}
尽管它是一些棘手的代码。我不确定我是否信任它。
需要说明的是,我知道有针对实际代码的解决方案可以产生我正在寻找的结果,但这不是我关心的问题。我担心为什么我 已经编写的代码 没有产生所需的输出。
我写了这个函数:
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++;
}
}
尽管它是一些棘手的代码。我不确定我是否信任它。