Xóa các ký tự phù hợp với một mẫu

C++:
Xóa các ký tự phù hợp với một mẫu

Làm Thế Nào:

Hãy loại bỏ các ký tự sử dụng eraseremove_if cùng với biểu thức lambda. Dưới đây là một ví dụ nhanh:

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

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

    // Loại bỏ tất cả các ký tự số
    data.erase(std::remove_if(data.begin(), data.end(), ::isdigit), data.end());
    
    std::cout << data << std::endl; // Hiển thị: Bnn!
    
    return 0;
}

Kết quả mẫu:

Bnn!

Tìm Hiểu Sâu

Thuật toán std::remove_if từ tiêu đề <algorithm> thực ra không co lại chuỗi; nó sắp xếp lại các phần tử và trả về một con trỏ đến điểm kết thúc logic mới. Phương thức erase của lớp std::string sau đó loại bỏ “phần thừa” từ cuối. Sự kết hợp này ra đời với C++98 và vẫn hiệu quả và phổ biến.

Có phương án khác không? Đối với các mẫu phức tạp, regex (<regex>) là công cụ đa năng của bạn. Nhưng, nó quá mức cần thiết cho những công việc đơn giản.

Chi tiết? std::remove_if và các thuật toán tương tự dựa vào các trình lặp, mà C++ đã áp dụng từ Thư viện Mẫu Chuẩn (STL) vào giữa những năm 90. Chúng trao quyền cho lập trình tổng quát, đảm bảo mã code cắt và thay đổi của bạn hoạt động trên chuỗi, danh sách, bạn tên nó.

Xem Thêm