我试图通过使用insert函数在字符串中的字符前添加空格。
有人可以解释为什么以下代码不起作用吗?
for(int i = 0; i < line.length(); i++)
{
if(line[i+1] == '=')
{
line.insert(i, " ");
}
}
答案 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, " ");
}
}