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

我使用GDB发现了我的问题。我发现隐藏 \b 删除最后一个字符后,它添加到我的字符串中。它实际上代表了背景,但没有解释。感谢您的帮助!

"Roflcopt\b"

其他提示

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

我按预期检查了这项工作 http://www.ideone.com (看 这里),还检查了该字符串:: length()按预期工作。

我认为问题在其他地方。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top