Удаление символов, соответствующих шаблону

C++:
Удаление символов, соответствующих шаблону

Как это сделать:

Давайте удалим символы, используя erase и remove_if наряду с лямбда-выражениями. Вот быстрый пример:

#include <iostream>
#include <algorithm>
#include <string>

int main() {
    std::string data = "B4n4n4!";

    // Удалить все числовые символы
    data.erase(std::remove_if(data.begin(), data.end(), ::isdigit), data.end());
    
    std::cout << data << std::endl; // Вывод: Bnn!
    
    return 0;
}

Пример вывода:

Bnn!

Погружение в детали

Алгоритм std::remove_if из заголовочного файла <algorithm> на самом деле не уменьшает строку; он переупорядочивает элементы и возвращает указатель на новый логический конец. Метод erase класса std::string затем удаляет “мертвую древесину” с конца. Эта комбинация появилась в C++98 и остается эффективной и популярной.

Альтернативы? Для сложных шаблонов regex (<regex>) - ваш нож швейцарского армейца. Но это избыточно для простых задач.

Детали? std::remove_if и подобные алгоритмы опираются на итераторы, которые C++ заимствовал из Библиотеки Шаблонов Стандарта (STL) в середине 90-х. Они поддерживают универсальное программирование, гарантируя, что ваш код изменения и замены работает со строками, списками, назовите как угодно.

Смотрите также