การลบตัวอักษรที่ตรงกับรูปแบบ

C++:
การลบตัวอักษรที่ตรงกับรูปแบบ

วิธีการ:

มาดึงอักขระออกโดยใช้ erase และ remove_if ควบคู่ไปกับนิพจน์ lambda นี่คือตัวอย่างที่เร็ว:

#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++ ได้รับมาจาก Standard Template Library (STL) ในช่วงกลางยุค 90s พวกมันสนับสนุนการเขียนโปรแกรมแบบเจเนอริก, รับรองว่าโค้ดการตัดและเปลี่ยนของคุณทำงานได้กับสตริง, ลิสต์, อะไรต่อมิอะไรก็ตาม

ดูเพิ่มเติม