Bagi Anda yang lebih suka gaya pengkodean lambda yang lebih ringkas, lebih mudah dibaca ...
Contoh ini menghapus semua karakter non-alfanumerik dan spasi dari string lebar. Anda dapat mencampurnya dengan salah satu fungsi pembantu ctype.h lainnya untuk menghapus pengujian berbasis karakter yang tampak rumit.
(Saya tidak yakin bagaimana fungsi ini akan menangani bahasa CJK, jadi berjalanlah dengan lembut ke sana.)
// Boring C loops: 'for(int i=0;i<str.size();i++)'
// Boring C++ eqivalent: 'for(iterator iter=c.begin; iter != c.end; ++iter)'
Lihat jika Anda tidak menganggap ini lebih mudah untuk dipahami daripada loop C / C ++ untuk / iterator yang berisik:
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());
});
hasil newLabel setelah menjalankan kode ini: " 1ReplenMoveRPMV "
Ini hanya akademis, karena jelas akan lebih tepat, ringkas dan efisien untuk menggabungkan logika 'if' dari lambda0 (first for_each ) ke dalam lambda1 tunggal (kedua for_each ), jika Anda telah menetapkan karakter mana yang menjadi "badChars" .