Я пытаюсь добавить пробел перед символом в строке с помощью функции вставки.
Может ли кто-нибудь объяснить, почему следующий код не работает?
for(int i = 0; i < line.length(); i++)
{
if (line[i+1] == '=')
{
line.insert(i, " ");
}
}
Пожалуйста, добавьте более конкретную информацию о проблеме.





Код кажется прекрасным, за исключением одной маленькой детали:
Представьте, что у вас есть строка с «test = something». Когда вы повторяете его, когда i равно 3, вы обнаружите, что следующий символ является равным, поэтому вы помещаете в него пробел. На следующей итерации i будет 4, но вы только что добавили пробел, поэтому при i, равном 5, будет такой же знак равенства. Итак, вы ставите еще один пробел и так далее. Чтобы исправить это, вы можете попробовать:
std::string line = "test=something";
for (int i = 0; i < line.length(); i++)
{
if (line[i + 1] == '=')
{
i++;
line.insert(i, " ");
}
}
или ... можно исключить потенциальный доступ за границу и вместо этого проверить line[i] == '='.
да, моя беда: P У Killzone Kid было лучшее решение: P
Если вы хотите вставить перед =, вы можете напрямую получить индекс =, а не индекс символа, за которым следует =. Это может привести к закрытому доступу.
Кроме того, когда вы вставляете пробел, вы расширяете свою строку на 1, это нормально, но только если вы также настраиваете счетчик i, иначе он будет вставлять снова и снова и снова перед =, что приведет к бесконечному циклу. Настройте свой код следующим образом:
for (int i = 0; i < line.length(); i++)
{
if (line[i] == '=')
{
line.insert(i++, " ");
}
}
работал отлично. отличное объяснение. большое спасибо!
Определить
doesn't work