gpt4 book ai didi

c++ - 在字符串中为每个第N个字符插入空格的函数无法正常工作吗?

转载 作者:行者123 更新时间:2023-12-02 10:13:06 25 4
gpt4 key购买 nike

明确地说,我知道有一些实际代码的解决方案可以产生我想要的结果,但这不是我所关心的。我担心为什么我已经编写的代码无法产生所需的输出。
我写了这个函数:

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的每个间隔插入一个空格。 (在这种情况下为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++;
}
}
虽然这是一些棘手的代码。我不确定我是否相信它。

关于c++ - 在字符串中为每个第N个字符插入空格的函数无法正常工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62845247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com