PDA

View Full Version : [C++] Convertire stringa da maiuscolo a minusco ....


leon84
02-05-2005, 09:01
Ho una stringa di n caratteri maiuscoli e mi serve poterla convertire in minuscolo.. esiste qualche procedura già pronta in c++ ho devo scrivermi io un algoritmo facendo riferimento al codice ascii ?

tglman
02-05-2005, 11:14
Non so se esiste gia una funzione fatta ma dato che il problema è cosi banale ecco a lei:

char * uppercase(char * str)
{
for(int i=0;str[i]!='\0';i++)
if(str[i]>='a'&&str[i]<='z')str[i]-=32;
return str;
}

Ziosilvio
02-05-2005, 13:30
char * uppercase(char * str)
{
for(int i=0;str[i]!='\0';i++)
if(str[i]>='a'&&str[i]<='z')str[i]-=32;
return str;
}

A parte il fatto che questo codice converte minuscole in maiuscole, e non il contrario...
... e poi, funziona se la codifica per il testo è ASCII, ma non se è EBCDIC.
E non c'è scritto da nessuna parte che la codifica per il testo debba essere ASCII e non possa essere EBCDIC.
Io userei isupper() e tolower() (definite nell'header ctype.h).

Dimenticavo: la funzione scritta così fallisce se il suo argomento è una costante stringa.

leon84
02-05-2005, 14:21
A parte il fatto che questo codice converte minuscole in maiuscole, e non il contrario...
... e poi, funziona se la codifica per il testo è ASCII, ma non se è EBCDIC.
E non c'è scritto da nessuna parte che la codifica per il testo debba essere ASCII e non possa essere EBCDIC.
Io userei isupper() e tolower() (definite nell'header ctype.h).

Dimenticavo: la funzione scritta così fallisce se il suo argomento è una costante stringa.

queste due funzioni prendono in ingresso semplicemente la stringa ????

tglman
02-05-2005, 14:31
Scusate ho letto male ma è sufficente cambiare cosi

char * lowercase(char * str)
{
for(int i=0;str[i]!='\0';i++)
if(str[i]>='A'&&str[i]<='Z')str[i]+=32;
return str;
}

Si questo codice va bene per una codifica ascii e non per altre codifiche ma comunque quando crei un programma sai la codifica che usi (almeno lo spero).
Riguardo alla costante stringa cosa intende...

Ciao.

Ziosilvio
02-05-2005, 15:00
queste due funzioni prendono in ingresso semplicemente la stringa ????
No, un singolo carattere.
Leggi la man page di Linux, l'help in linea dell'IDE, o l'appendice B del K&R.

Ziosilvio
02-05-2005, 15:03
Riguardo alla costante stringa cosa intende...
Che se fai una cosa del tipo:
printf("%s\n",lowercase("HELLO WORLD"));
l'output sara' HELLO WORLD e non hello world.
EDIT: ammesso che l'output ci sia... io ho fatto una prova, e mi ha dato un Segmentation fault.