Para aquellos de ustedes que prefieren un estilo de codificación lambda más conciso y fácil de leer ...
Este ejemplo elimina todos los caracteres de espacio en blanco y no alfanuméricos de una cadena ancha. Puede mezclarlo con cualquiera de las otras funciones auxiliares de ctype.h para eliminar pruebas basadas en caracteres de aspecto complejo.
(No estoy seguro de cómo estas funciones manejarían los lenguajes CJK, así que camine suavemente allí).
// Boring C loops: 'for(int i=0;i<str.size();i++)'
// Boring C++ eqivalent: 'for(iterator iter=c.begin; iter != c.end; ++iter)'
Vea si no encuentra esto más fácil de entender que los ruidosos bucles C / C ++ for / iterator:
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 resultados después de ejecutar este código: " 1ReplenMoveRPMV "
Esto es solo académico, ya que claramente sería más preciso, conciso y eficiente combinar la lógica 'if' de lambda0 (primero para_cada ) en la única lambda1 (segundo para_cada ), si ya ha establecido qué caracteres son los "badChars" .