2

我目前正在尝试实现从 C++ 中的文本字段中删除字符。如果用户点击 Backspace,则执行以下代码。当前没有光标,它应该只删除最后一个字符...

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

这第一次工作正常,但如果你再次点击 Backspace,它不会删除任何东西。

我打印了mText.length()它,它表明长度永远不会改变。我尝试resize()了字符串,它工作正常,但我第一次点击 Backspace 它删除了2 个字符。

我希望有人可以解释这种行为并帮助我解决问题。我对内存分配不太了解,所以请耐心等待;)

感谢
opatut

4

3 回答 3

2

据此,带有单个 size_t 参数string.erase 将删除从指定位置到字符串末尾的所有字符。可以为要删除的字符数提供第二个 size_t 参数。

我使用http://www.ideone.com(看这里)检查了它是否按预期工作,并且还检查了 string::length() 是否按预期工作。

我认为问题出在其他地方..

于 2010-09-13T21:26:37.423 回答
1

为什么不试试if(!mText.empty())mText = mText.substr(0, mText.length()-1);

于 2010-09-13T21:06:43.270 回答
0

我使用 gdb 发现了我的问题。\b我找到了在删除最后一个字符后添加到我的字符串中的隐藏转义序列。它实际上代表退格,但没有被解释。感谢您的帮助!

"Roflcopt\b"
于 2010-09-13T22:16:06.130 回答