|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2005
Messaggi: 123
|
[C] esercizio facile...
Si definisca una funzione di char * che accetti come parametro una stringa e restituisca una diversa stringa con tutti i caratteri alfabetici passati al caso maiuscolo e gli altri caratteri inalterati. La stringa originale non deve essere cambiata.
'A' in ascii è 65 'a' invece 97 quindi 97-65=32 prendo la stringa e sottraggo -32 su ogni carattere, giusto?? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2001
Città: Firenze
Messaggi: 585
|
Quote:
__________________
http://www.gnu.org/philosophy/no-wor...hments.it.html http://gprime.net/flash/postingandyou.php [1510 kB] |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
|
ricordati di trasformarle in int prima di sottrarre!
__________________
Federica |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jun 2005
Messaggi: 123
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Fai un controllo.
Qui trovi la tabella ascii http://www.asciitable.com/ Se è tra 97 e 122 (ovvero se è una minuscola) sottrai 32, altrimenti lasci il valore attuale.
__________________
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
il C memorizza i char direttamente con il loro codice ASCII, quindi non dovresti avere problemi di conversione.
__________________
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
|
Eventualmente se non te lo converte fai
Codice:
risultato[1] = (int) arr[1] - 32;
__________________
Federica |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2005
Messaggi: 123
|
ho qualche problema....
void cambia (char* c) { char *T; ....???? T[i]=(int) c-32; printf("%s ", c); } int main() { char* c= "ciao"; printf("%s \n",c); cambia(c) return 0; } |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
Quindi char T* è inutile. poi fai un ciclo con cui controlli se la stringa è terminata (da 0). Codice:
int i=0;
while(c[i]!='\0'){
if(c[i]>=97&&c[i]<=92){
c[i]=c[i]-32;
}
i++;
}
__________________
Ultima modifica di wisher : 18-03-2007 alle 19:40. Motivo: Non incrementavo i |
|
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
mia versione:
Codice:
char *Capitalize(char *Input)
{
char *Output;
int i;
Output = (char*)malloc(strlen(Input) + 1); /* occhio al leak */
for (i = 0; Input[i]; i++)
{
if ((Input[i] >= 'a') && (Input[i] <= 'z'))
{
Output[i] = Input[i] + 'A' - 'a';
}
else
{
Output[i] = Input[i];
}
}
return Output;
}
Ultima modifica di 71104 : 18-03-2007 alle 20:41. |
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Jun 2005
Messaggi: 123
|
mi dà un error (bus error)....
void cambia (char* c) { int i=0; while(c[i]!='\0'){ if(c[i]>=97 && c[i]<=122){ c[i]=c[i]-32; } i++; } printf("%s ", c); } int main() { char* c= "ciao"; printf("%s \n",c); cambia(c); return 0; } |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
perché hai provato a modificare un'area di memoria che la maggioranza dei compilatori nella maggiornaza dei casi imposta a sola lettura, ovvero la stringa "ciao". usa la malloc e risolvi il problema (oltre che rispettare le specifiche
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Non ho capito: e' vietato usare il toupper() ?
Usandolo e' tutto facile: Codice:
char *toUpperCase (char *strin)
{
char *strout;
char *p, *q;
strout = (char *)malloc (strlen(strin) + 1);
if (!strout)
return NULL; // Cannot allocate memory
q = strin;
p= strout;
while ((*p++ = toupper(*q++)));
return strout;
}
__________________
In God we trust; all others bring data |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
OT
IMHO è molto brutto allocare così...l'utilizzatore della vostra funzione sicuramente si scorderà di deallocare la stringa In questo caso: o si lascia costruire al chiamante il buffer di output o si sovrascrive la stringa corrente Concordo che ci sono casi in cui è impossibile attuare la prima politica, ma questo è uno dei tanti in cui non conviene allocare dinamicamente all'insaputa dell'utente. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:07.




















