Prima di proseguire...
Potrebbe interessarti la nostra collezione di esercizi C risolti?
Oggi vediamo come creare strtoupper e strtolower, cioè le due funzioni che convertono rispettivamente tutto in maiusco e in minuscolo.
Vediamo i codici:
void strtoupper(char *str){ int len = strlen(str), i; for(i=0;i<len;i++) if(str[i]>='a' && str[i]<='z') str[i] = str[i]-'a'+'A'; } void strtoupper(char *str){ int len = strlen(str), i; for(i=0;i<len;i++) if(str[i]>='A' && str[i]<='Z') str[i] = str[i]-'A'+'a'; }
In pratica controllo carattere per carattere se sono maiuscoli o minuscoli e li converto di conseguenza, con ad esempio str[i]-‘a’+’A’.
Per i più esperti propongo una versione con i puntatori, che non spiego perché è ovvia per chi sa usare i puntatori (ringrazio Marco per l’idea e il codice):
void strtoupper(char *str){ for(; *str; str++) if(*str>='a' && *str<='z') *str = *str-'a'+'A'; } void strtoupper(char *str){ for(;*str;str++) if(*str>='A' && *str<='Z') *str = *str-'A'+'a'; }
strtoupper e strtolower in c by cardinale claudio is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Pingback: php operazioni con le stringhe « tutorial programmazione
Mi sembra altamente inefficiente.
Non c’è alcun bisogno di fare una strlen, per ogni string passata, basta semplicemente controllare che non sia il carattere di fine stringa.
Non c’è neanche bisogno di una variabile i, perchè str è un puntatore,
io lo modificherei così:
Sono perfettamente d’accordo, ma una persona che sa usare i puntatori non ha bisogno di andare a vedere un articolo del genere…
Beh io non so che gente ci può essere qui.
Ho visto questo articolo non sembrava indirizzato a nessun tipo di target, e quindi ho pensto bene di completare il tutto.
E poi è uno dei primi articoli che mi sono usciti su google durante la ricerca, e io i puntatori li so’ usare.
Ciao,
Marco.
Be’ metterò anche la tua versione…
Grazie
Ciao
Claudio
Vabbene ok grazie 🙂