在字符串 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++, " ");
    }
}