如何在C ++中使用remove命令删除句子中的空格?

时间:2011-07-11 04:29:35

标签: c++ string stl trim erase-remove-idiom

我得到一个文件作为输入,我读到这样的第一行(引号标记开头和结尾,但不在文件中):

"      1,     2.0,     3.0,     4.0                         "

当我使用这样的删除命令时:

    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。这有什么问题?

2 个答案:

答案 0 :(得分:7)

std::remove只是将序列中所有未删除的元素向前移动;然后,您需要使用erase

截断底层容器
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());

这称为擦除删除习惯用法remove不能截断底层容器本身,因为它没有对容器的引用;它只有容器中元素的迭代器。

答案 1 :(得分:0)

詹姆斯的回答是正确的,这为我节省了很多工作。 td :: remove只是在序列中向前移动所有未删除的元素;然后,您需要使用erase:

截断底层容器

std.erase(std :: remove(s.begin(),s.end(),''),s.end()); 这被称为擦除删除习语。 remove不能截断底层容器本身,因为它没有对容器的引用;它只有容器中元素的迭代器。