สำหรับพวกคุณที่ชอบรูปแบบการเข้ารหัสแลมบ์ดาที่กระชับและอ่านง่ายขึ้น ...
ตัวอย่างนี้ลบอักขระที่ไม่ใช่ตัวเลขและตัวอักษรและเว้นวรรคสีขาวทั้งหมดออกจากสตริงแบบกว้าง คุณสามารถผสมกับctypeอื่น ๆhฟังก์ชันตัวช่วยเพื่อลบการทดสอบตามอักขระที่ดูซับซ้อนได้
(ฉันไม่แน่ใจว่าฟังก์ชันเหล่านี้จะจัดการกับภาษา CJK ได้อย่างไรดังนั้นให้เดินเบา ๆ ที่นั่น)
ดูว่าคุณไม่เข้าใจสิ่งนี้ง่ายกว่า C / C ++ ที่มีเสียงดังสำหรับ / iterator ลูปหรือไม่:
TSTRING label = _T("1. Replen & Move RPMV");
TSTRING newLabel = label;
set<TCHAR> badChars;
for_each(label.begin(), label.end(), [&badChars](TCHAR n){
if (!isalpha(n) && !isdigit(n))
badChars.insert(n);
});
for_each(badChars.begin(), badChars.end(), [&newLabel](TCHAR n){
newLabel.erase(std::remove(newLabel.begin(), newLabel.end(), n), newLabel.end());
});
ผลลัพธ์ newLabel หลังจากเรียกใช้รหัสนี้: " 1ReplenMoveRPMV "
นี่เป็นเพียงเชิงวิชาการเนื่องจากจะต้องมีความแม่นยำรัดกุมและมีประสิทธิภาพมากขึ้นในการรวมตรรกะ 'if' จาก lambda0 ( for_each ตัวแรก) ลงใน lambda1 (ตัวที่สองfor_each ) หากคุณได้กำหนดอักขระที่เป็น "badChars" แล้ว .