Как удалить пробел в предложении, используя команду удаления в C ++? - PullRequest
4 голосов
/ 11 июля 2011

Я получаю файл в качестве ввода и читаю первую строку следующим образом (кавычки отмечают начало и конец, но отсутствуют в файле):

"      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 ]

7 голосов
/ 11 июля 2011

std::remove просто перемещает все не удаленные элементы вперед в последовательности;Затем вам нужно обрезать нижележащий контейнер, используя erase:

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

Это называется идиома erase-remove .remove не может усечь сам нижележащий контейнер, потому что у него нет ссылки на контейнер;он имеет только итераторы для элементов в контейнере.

0 голосов
/ 25 декабря 2012

Джеймс был прав в своем ответе, и это спасло мне много работы. td :: remove просто перемещает все не удаленные элементы вперед в последовательности; Затем вам нужно обрезать нижележащий контейнер, используя erase:

std.erase (std :: remove (s.begin (), s.end (), ''), s.end ()); Это называется идиома стирания-удаления. remove не может усекать сам нижележащий контейнер, потому что у него нет ссылки на контейнер; он имеет только итераторы для элементов в контейнере.

...