2011-07-11 65 views
4

我得到一個文件作爲輸入,我這樣寫的第一行(引號標記開始和結束,但不是在文件中):如何在C++中使用remove命令刪除空格中的空格?

"  1,  2.0,  3.0,  4.0       " 

當我使用remove命令是這樣的:

astring = line; 
    cout << endl << "Before trim: " << line << endl; 
    remove(astring.begin(), astring.end(), ' '); 
    cout << endl << "After trim: " << astring << endl; 

我得到的輸出:

1,2.0,3.0,4.02.0, 3.0,  4.0 

我需要的輸出僅以1,2.0,3.0,4.0。這裏有什麼問題?

+0

看起來像製表符。 –

回答

7

std::remove只是將序列中所有未去除的元素向前移動;那麼你需要截斷底層的容器,使用erase

s.erase(std::remove(s.begin(), s.end(), ' '), s.end()); 

這就是所謂的擦除remove慣用法remove不能截斷底層容器本身,因爲它沒有對容器的引用;它只有容器中元素的迭代器。

+0

我不得不說,這是關於C++標準庫容器最奇怪的事情之一。 –

+0

@Greg:是的,「remove」這個名字並不是很直觀。一種看待它的方法是對容器中元素的操作通常是非成員算法,但對容器本身的操作通常是容器類的成員函數。 –

+0

感謝詹姆斯.......它的作品............ – ebe

0

詹姆斯的回答是正確的,它爲我節省了很多工作。 td :: remove只是將序列中所有未去除的元素向前移動;然後您需要使用擦除來截斷底層容器:

std.erase(std :: remove(s.begin(),s.end(),''),s.end()); 這被稱爲擦除刪除成語。刪除不能截斷底層容器本身,因爲它沒有對容器的引用;它只有容器中元素的迭代器。