Đối với những người bạn thích phong cách viết mã lambda ngắn gọn hơn, dễ đọc hơn ...
Ví dụ này xóa tất cả các ký tự không phải chữ và số và khoảng trắng khỏi một chuỗi rộng. Bạn có thể kết hợp nó với bất kỳ hàm trợ giúp nào khác của ctype.h để loại bỏ các bài kiểm tra dựa trên ký tự phức tạp.
(Tôi không chắc các chức năng này sẽ xử lý các ngôn ngữ CJK như thế nào, vì vậy hãy đi bộ nhẹ nhàng ở đó.)
// Boring C loops: 'for(int i=0;i<str.size();i++)'
// Boring C++ eqivalent: 'for(iterator iter=c.begin; iter != c.end; ++iter)'
Xem nếu bạn không thấy điều này dễ hiểu hơn các vòng lặp C / C ++ cho / iterator ồn ào:
TSTRING label = _T("1. Replen & Move RPMV");
TSTRING newLabel = label;
set<TCHAR> badChars; // Use ispunct, isalpha, isdigit, et.al. (lambda version, with capture list parameter(s) example; handiest thing since sliced bread)
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 kết quả sau khi chạy mã này: " 1ReplenMoveRPMV "
Điều này chỉ mang tính học thuật, vì rõ ràng sẽ chính xác, ngắn gọn và hiệu quả hơn nếu kết hợp logic 'if' từ lambda0 ( for_each đầu tiên ) vào lambda1 ( for_each thứ hai ), nếu bạn đã thiết lập các ký tự nào là "badChars" .