C ++从字符串中删除字符

时间:2010-09-13 21:01:04

标签: c++ string character stdstring erase

我目前正在尝试从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 个答案:

答案 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"