Добавление пробела перед символом в строковой функции вставки C ++ - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь добавить пробел перед символом в строке с помощью функции вставки.

Может кто-нибудь любезно объяснить, почему не работает следующий код?

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

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Если вы хотите вставить до =, вы можете получить индекс = напрямую, а не индекс char, за которым следует =. Это может привести к выходу за пределы.

Кроме того, когда вы вставляете пробел, вы расширяете строку на 1, это нормально, но только если вы также настраиваете счетчик i, в противном случае он будет вставляться снова и снова и снова до =, что приведет к бесконечному циклу. Настройте свой код следующим образом:

for (int i = 0; i < line.length(); i++)
{
    if (line[i] == '=')
    {
        line.insert(i++, " ");
    }
}
0 голосов
/ 06 мая 2018

Код выглядит нормально, за исключением одной маленькой детали:

Представьте, что у вас есть строка с "test = кое-что". Когда вы итерируете его, когда мне 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, " ");
    }
}
...