在字符串 C++ 插入函数中的字符前添加 space
Adding a space before a character in a string C++ insert function
我正在尝试使用插入函数在字符串中的字符前添加 space。
谁能解释一下为什么下面的代码不起作用?
for(int i = 0; i < line.length(); i++)
{
if(line[i+1] == '=')
{
line.insert(i, " ");
}
}
代码看起来不错,除了一个小细节:
假设您有一个带有 "test=something" 的字符串。当你迭代它时,当 i 为 3 时,你会发现下一个字符是一个等号,所以你将 space 放入其中。下一次迭代 i 将是 4,但你刚刚添加了一个 space,所以在 i 等于 5 时有相同的等号。所以你放另一个 space 等等。要解决此问题,您可以尝试:
std::string line = "test=something";
for (int i = 0; i < line.length(); i++)
{
if (line[i + 1] == '=')
{
i++;
line.insert(i, " ");
}
}
如果要在=
之前插入,可以直接获取=
的索引,而不是=
后面的char索引。这可能会导致越界访问。
此外,当您插入 space 时,您的字符串会增加 1,这没关系,但前提是您还调整了计数器 i
,否则它会在 [ 之前一次又一次地插入=11=] 导致死循环。以这种方式调整您的代码:
for (int i = 0; i < line.length(); i++)
{
if (line[i] == '=')
{
line.insert(i++, " ");
}
}
我正在尝试使用插入函数在字符串中的字符前添加 space。
谁能解释一下为什么下面的代码不起作用?
for(int i = 0; i < line.length(); i++)
{
if(line[i+1] == '=')
{
line.insert(i, " ");
}
}
代码看起来不错,除了一个小细节:
假设您有一个带有 "test=something" 的字符串。当你迭代它时,当 i 为 3 时,你会发现下一个字符是一个等号,所以你将 space 放入其中。下一次迭代 i 将是 4,但你刚刚添加了一个 space,所以在 i 等于 5 时有相同的等号。所以你放另一个 space 等等。要解决此问题,您可以尝试:
std::string line = "test=something";
for (int i = 0; i < line.length(); i++)
{
if (line[i + 1] == '=')
{
i++;
line.insert(i, " ");
}
}
如果要在=
之前插入,可以直接获取=
的索引,而不是=
后面的char索引。这可能会导致越界访问。
此外,当您插入 space 时,您的字符串会增加 1,这没关系,但前提是您还调整了计数器 i
,否则它会在 [ 之前一次又一次地插入=11=] 导致死循环。以这种方式调整您的代码:
for (int i = 0; i < line.length(); i++)
{
if (line[i] == '=')
{
line.insert(i++, " ");
}
}