C ++ удалить символ из строки - PullRequest
2 голосов
/ 14 сентября 2010

В настоящее время я пытаюсь реализовать удаление символов из текстового поля в C ++. Если пользователь нажимает клавишу Backspace, выполняется следующий код. На данный момент нет курсора, он должен просто удалить последний символ ...

if (mText.length() > 0){
    mText.erase( mText.length() - 1, 1);
    // mText.resize(mText.length() - 1);
}

Это отлично работает в первый раз, но если вы нажмете Backspace снова, это ничего не удалит.

Я напечатал mText.length(), и это показывает, что длина никогда не меняется. Я попытался resize() строку, она работает нормально, но при первом нажатии Backspace удаляются 2 символов.

Я надеюсь, что кто-то может объяснить это поведение и помочь мне решить проблему. Я не знаю много о распределении памяти, поэтому, пожалуйста, будьте терпеливы со мной;)

Спасибо
opatut

Ответы [ 3 ]

2 голосов
/ 14 сентября 2010

Согласно this , string.erase с одним параметром size_t удалит все символы из указанной позиции до конца строки. Второй параметр size_t может быть предоставлен для количества удаляемых символов.

Я проверил, что это работает, как ожидалось, используя http://www.ideone.com (смотрите здесь ), а также проверил, что string :: length () работает, как ожидалось.

Я думаю, что проблема в другом ..

1 голос
/ 14 сентября 2010

Почему бы не попробовать if(!mText.empty())mText = mText.substr(0, mText.length()-1);?

0 голосов
/ 14 сентября 2010

Я нашел свою проблему с помощью GDB. Я нашел скрытую escape-последовательность \b, которая была добавлена ​​в мою строку после удаления последнего символа. Это на самом деле означает возврат, но это не было истолковано. Спасибо за вашу помощь!

"Roflcopt\b"
...