2010-09-13 239 views
2

我目前正試圖從C++中的文本字段中實現刪除字符。如果用戶點擊Backspace,則執行以下代碼。目前還沒有光標,它應該只是刪除最後一個字符...C++從字符串中刪除字符

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

也能正常工作的第一次,但如果你再打Backspace鍵,它不會刪除任何東西。

我打印了mText.length(),它顯示長度從未改變。我試圖resize()這個字符串,它工作的很好,但是我第一次點擊Backspace時刪除了個字符。

我希望有人能解釋這種行爲並幫助我解決問題。我不知道很多關於內存分配,所以請我耐心;)

感謝
opatut

+2

什麼是mText的類型? – 2010-09-13 21:03:47

+0

是mText是「文本字段」變量的副本,而不是變量本身? – 2010-09-13 21:06:38

+0

private: std::string mText;在類定義中......所以pop_back是不可選的...... – opatut 2010-09-13 21:11:15

回答

0

我發現我的問題使用gdb。刪除最後一個字符後,我發現隱藏的\b轉義序列已添加到我的字符串中。它實際上代表了退格,但它沒有被解釋。感謝您的幫助!

"Roflcopt\b" 
1

爲什麼不試試if(!mText.empty())mText = mText.substr(0, mText.length()-1);

+0

hm,沒想到substr ...但這也不管用。 mText.length();不會改變 – opatut 2010-09-13 21:11:56

+0

爲什麼不只是'pop_back()'?或者至少在'erase' /'調整大小'它。 – GManNickG 2010-09-13 21:28:39

+0

std :: string沒有pop_back方法,不幸的是... – opatut 2010-09-13 21:30:24

2

根據this,帶有單個size_t參數的string.erase會將指定位置的所有字符移除到字符串的末尾。可以爲要刪除的字符數量提供第二個size_t參數。

我按照預期使用http://www.ideone.com(查看here)檢查了此作品,並檢查了string :: length()是否按預期工作。

我認爲問題在別處..

+0

[OT]哇,ideone.com會很有用,謝謝![/ OT] – 2010-09-13 21:46:55

+0

呵呵。看起來像Codepad.org更受支持的語言。 – greyfade 2010-09-14 01:58:56