在字符串C ++插入函数中的字符前添加空格

时间:2018-05-06 10:41:09

标签: c++ string insert space

我试图通过使用insert函数在字符串中的字符前添加空格。

有人可以解释为什么以下代码不起作用吗?

for(int i = 0; i < line.length(); i++)
{
   if(line[i+1] == '=')
   {
      line.insert(i, " ");
   }
}

2 个答案:

答案 0 :(得分:1)

如果要在=之前插入,则可以直接获得=的索引,而不是=之后的char索引。这可能导致超出界限。

此外,当您插入空格时,您将字符串扩展为1,这是正常的,但仅当您还调整计数器i时,否则它将在=之前反复插入,导致无限循环。以这种方式调整您的代码:

for (int i = 0; i < line.length(); i++)
{
    if (line[i] == '=')
    {
        line.insert(i++, " ");
    }
}

答案 1 :(得分:0)

除了一个小细节之外,代码似乎很好:

想象一下,你有一个带有“test = something”的字符串。当你迭代它时,当我是3时你会发现下一个字符是一个等号,所以你给它留了一个空格。下一次迭代我将是4,但你只是添加了一个空格,所以在i等于5时,它们具有相同的等号。所以你放了另一个空间等等。要解决此问题,您可以尝试:

std::string line = "test=something";
for (int i = 0; i < line.length(); i++)
{
    if (line[i + 1] == '=')
    {
        i++;
        line.insert(i, " ");
    }
}