QtC++ QVector Ошибка
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.
Причем много раз. При отладке я заметил, что первый раз выводится когда на "Вот этой строчке(в коде есть комментарий)" i равна 4. И _line[i] равна " main"
Что означает эта надпись и как от неё избавится?
Ответы (2 шт):
Давайте посмотрим на этот код детальнее
while (true)
{
if (_line[i][0] == ' ' || _line[i][0] == '\n' || _line[i][0] == '\t')
{
_line[i].remove(0, 1); // Вот эта строчка
}
else
{
break;
}
}
и допустим в строке просто один пробел. При первом проходе этот пробел будет удален. При следующем цикле строка будет пустая, но Вы пытаетесь прочитать первый символ. А его нет... Может заменить условие на такое:
while (!_line[i].isEmpty())
А лучше выбросить этот код и написать что-то такое :)
QStringList _line = {"class", " jopa ", "{", " ", "int", " main", "(", "\t", ")", "\t", "{", "\n", "}", "\n\n\n\t\t ", "}", "\n\n"};
for(auto& str : _line) {
str = str.simplified();
}
_line.removeAll(QString{});