¿Cómo se puede convertir una cadena en mayúsculas? Los ejemplos que he encontrado en Google sólo tienen que ver con los caracteres.
struct convert {
void operator()(char& c) { c = toupper((unsigned char)c); }
};
// ...
string uc_str;
for_each(uc_str.begin(), uc_str.end(), convert());
Nota: Un par de problemas con la solución superior:
21.5 Utilidades de las secuencias terminadas en cero.
El contenido de estas cabeceras será el mismo que el de las cabeceras de la Biblioteca C Estándar <ctype.h>, <wctype.h>, <string.h>, <wchar.h>, y <stdlib.h> [...]
Lo que significa que los miembros de cctype
bien pueden ser macros no aptas para el consumo directo en algoritmos estándar.
Otro problema con el mismo ejemplo es que no se hace un casting del argumento ni se verifica que éste sea no negativo; esto es especialmente peligroso para los sistemas en los que se firma con char
. (La razón es: si esto se implementa como una macro, probablemente utilizará una tabla de búsqueda y sus índices de argumentos en esa tabla. Un índice negativo le dará UB).
pruebe la función toupper()
(#include <ctype.h>
). acepta caracteres como argumentos, las cadenas están formadas por caracteres, por lo que tendrá que iterar sobre cada uno de los caracteres que al juntarse conforman la cadena