Я пытаюсь удалить каждый '0'
в std::string
, начиная со спины. Согласно this, существует несколько способов обратного итератора .erase
.string erase добавляет элементы с обратными итераторами
Странно то, что все они присоединяют цифры к std::string
, а не стирают их!
Вот Немного образцов
//'str' will be "5.090000"
std::string str = std::to_string(5.09);
auto it = std::remove_if(str.rbegin(), str.rend(), [](char value) {
return value == '0';
});
1) Пред- C++11
путь:
str.erase(--(it.base()));
2) C++11
способ (1)
str.erase(std::next(it).base());
3) C++11
путь (2)
std::advance(it, 1);
str.erase(it.base());
Во всех случаях str == "5.095.9"
. Зачем? Потому что, как я это вижу, str
должен быть 5.9
, но это не так ...
Моя догадка, что я делаю что-то неправильно с задом итераторов, потому что если вы разбить строку: 5.09 | 5.9
, первое значение все еще находится между '0'
, но не последними. Второе значение на самом деле является ожидаемым std::string
.
Что я делаю неправильно?
Посмотрите документацию 'станд :: remove_if' очень тщательно, и думать о диапазоне вы манипулировали. –
Я никогда не использовал обратные итераторы, но моя наивная догадка заключалась в том, что вы должны использовать их следующим образом: 'std :: remove_if (str.rend(), str.rbegin(), [] (значение char)' – user463035818
@KerrekSB ups, я испортил ему упражнение rtfm? – user463035818