void Line::RemoveSpaces()
{
// Цикл по всем "компонентам" строки
for (int i = 0; i < _line.size(); ++i)
{
while (true)
{
if (_line[i][0] == ' ' || _line[i][0] == '\n' || _line[i][0] == '\t')
{
_line[i].remove(0, 1); // Вот эта строчка
}
else
{
break;
}
}
for (int j = _line[i].length() - 1; j > 0; --j)
{
if (_line[i][j] == ' ' || _line[i][j] == '\n' || _line[i][j] == '\t')
{
_line[i].remove(j, 1);
}
else
{
break;
}
}
if (_line[i] == "")
{
_line.erase(_line.begin() + i);
}
}
}
_line
- 这是QVector<QString>
在函数调用之前RemoveSpaces
-_line
等于:
{"class", " jopa ", "{", " ", "int", " main", "(", "\t", ")", "\t", "{", "\n", "}", "\n\n\n\t\t ", "}", "\n\n"}
之后的预期结果:
{"class", "jopa", "{", "int", "main", "(", ")", "{", "}", "}"}
预期达到预期。结果是正确的。但以下输出到控制台:Using QCharRef with an index pointing outside the valid range of a QString. The corresponding behavior is deprecated, and will be changed in a future version of Qt.
而且很多次。在调试的时候,我注意到第一次是在 on 时输出的"Вот этой строчке(в коде есть комментарий)"
i равна 4
。和_line[i] равна " main"
这个铭文是什么意思以及如何摆脱它?
让我们更详细地看一下这段代码。
假设字符串中只有一个空格。在第一次通过时,此间隙将被消除。在下一个循环中,字符串将为空,但您正在尝试读取第一个字符。但它不存在......可以用这个替换条件:
最好扔掉这段代码,写这样的东西:)