Hoe kan men een string omzetten naar hoofdletters. De voorbeelden die ik heb gevonden bij het googlen hebben alleen te maken met hoofdletters.
struct convert {
void operator()(char& c) { c = toupper((unsigned char)c); }
};
// ...
string uc_str;
for_each(uc_str.begin(), uc_str.end(), convert());
Note: Een paar problemen met de bovenste oplossing:
21.5 Null-terminated sequence utilities
De inhoud van deze headers moet hetzelfde zijn als de Standard C Library headers <ctype.h>, <wctype.h>, <string.h>, <wchar.h>, en <stdlib.h> [...]
Wat betekent dat de cctype
leden heel goed macro's kunnen zijn die niet geschikt zijn voor directe consumptie in standaard algoritmen.
Een ander probleem met hetzelfde voorbeeld is dat het argument niet wordt gecast en dat niet wordt gecontroleerd of het niet-negatief is; dit is vooral gevaarlijk voor systemen waar gewone char
is ondertekend. (De reden hiervoor is: als dit wordt geïmplementeerd als een macro zal het waarschijnlijk een lookup tabel gebruiken en je argument indexeert in die tabel. Een negatieve index geeft je UB).
probeer de toupper()
functie (#include <ctype.h>
). het accepteert karakters als argumenten, strings zijn opgebouwd uit karakters, dus je'll moet itereren over elk individueel karakter dat samen de string vormen