我目前正在尝试从C ++中的文本字段中删除字符。如果用户点击Backspace,则执行以下代码。目前没有光标,它应该只删除最后一个字符......
if (mText.length() > 0){
mText.erase( mText.length() - 1, 1);
// mText.resize(mText.length() - 1);
}
第一次运行正常,但如果再次点击Backspace,它就不会删除任何内容。
我打印了mText.length()
,它表明长度永远不会改变。我尝试resize()
字符串,它工作正常,但是第一次点击Backspace时它会删除 2 个字符。
我希望有人可以解释这种行为,并帮助我解决问题。我对内存分配知之甚少,所以请耐心等待我;)
感谢
opatut 的
答案 0 :(得分:2)
根据this,带有单个size_t参数的string.erase将删除指定位置到字符串末尾的所有字符。可以为要删除的字符数提供第二个size_t参数。
我使用http://www.ideone.com(查看here)检查了这是否正常工作,并检查string :: length()是否按预期工作。
我认为问题出在其他地方..
答案 1 :(得分:1)
为什么不试试if(!mText.empty())mText = mText.substr(0, mText.length()-1);
?
答案 2 :(得分:0)
我使用gdb发现了我的问题。我找到了隐藏的\b
转义序列,在我删除了最后一个字符后添加到我的字符串中。它实际上代表退格,但它没有被解释。谢谢你的帮助!
"Roflcopt\b"