2

現在、C++ でテキスト フィールドから文字を削除する実装を試みています。ユーザーが Backspace キーを押すと、次のコードが実行されます。現在カーソルはありません。最後の文字を削除するだけです...

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

これは最初は問題なく動作しますが、もう一度 Backspace を押しても何も削除されません。

を印刷したmText.length()ところ、長さが変わらないことがわかりました。文字列を試してみましたが、正常に動作しますが、最初にバックスペースを押すと2文字resize()が削除されます。

誰かがこの動作を説明し、問題の解決を手伝ってくれることを願っています. 私はメモリ割り当てについてあまり知らないので、しばらくお待ちください;)

ありがとうござい
ます

4

3 に答える 3

2

これによると、単一のsize_tパラメーターを持つstring.eraseは、指定された位置から文字列の終わりまでのすべての文字を削除します。削除する文字数に対して、2番目の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 に答える