PDA

Visualizza la versione completa : [C] funzione caratteri alfabetici e non


pablito92
15-09-2012, 10:37
Ciao ragazzi l'esercizio che volevo proporvi ่ il seguente:
Scrivere il codice una funzione C che restituisca un vettore di quattro interi contenente il numero di caratteri alfabetici in maiuscolo,il numero di caratteri alfabetici in minuscolo, il numero delle cifre ed il numero di caratteri non alfanumerici contenuti in una stringa passata come argomento alla funzione

La mia soluzione invece ่:

Int *count(char *str) {
int i, p[4];
for (i=0; i<’\0’; i++) {
if (i ≥’A’ && i ≤’Z’)
p[0]++;
if (i ≥’a’ && i ≤’z’)
p[1]++;
if (i ≥’0’ && i ≤’9’)
p[2]++;
if (i != p[0] && i != p[1] && i != p[2])
p[3]++;
return p;
}
}

che ne dite vi sembra giusto?
potreste dirmi dove sbaglio?

oregon
15-09-2012, 10:46
i ่ l'indice numerico dei caratteri che controlli ... ma non rappresenta i caratteri che invece stanno in str. Quindi tutte le if sono sbagliate (oltre alla for nel controllo di fine ciclo).

Anche l'ultima if non ha senso.

Il vettore che restituisci non pu๒ essere locale (p). Devi allocare dinamicamente il vettore e restituirne il puntatore.

pablito92
15-09-2012, 10:56
Originariamente inviato da oregon
i ่ l'indice numerico dei caratteri che controlli ... ma non rappresenta i caratteri che invece stanno in str. Quindi tutte le if sono sbagliate (oltre alla for nel controllo di fine ciclo).

Anche l'ultima if non ha senso.

Il vettore che restituisci non pu๒ essere locale (p). Devi allocare dinamicamente il vettore e restituirne il puntatore.

oregon per piacere potresti scrivermi quindi la versione corretta?

oregon
15-09-2012, 11:04
Avevi chiesto di dirti dove sbagliavi ... adesso tenta di aggiustare il codice in base ai suggerimenti.

pablito92
15-09-2012, 11:10
Originariamente inviato da oregon
Avevi chiesto di dirti dove sbagliavi ... adesso tenta di aggiustare il codice in base ai suggerimenti.

senti oregon ho deciso di postare la funzione su questo forum perch่ credevo potreste darmi una mano sul serio. io ti ringrazio per la correzione che mi hai fatto ma ti sarei pi๙ grato se potessi scrivermi come risolverla. la tua risposta (ad uno che ่ alle prime armi con il C) potrebbe darmi un aiuto enorme. potresti dirmi come corereggerla?facciamolo magari passo passo con le tue indicazioni

oregon
15-09-2012, 11:16
Guarda che in questo forum non si scrivono esercizi ma si danno solo suggerimenti.

Quindi, la mano l'hai avuta, la scrittura completa dell'esercizio al posto tu, no.

pablito92
15-09-2012, 11:41
Originariamente inviato da oregon
Guarda che in questo forum non si scrivono esercizi ma si danno solo suggerimenti.

Quindi, la mano l'hai avuta, la scrittura completa dell'esercizio al posto tu, no.

cos์ invece ่ corretto?
Int *count(char *str) {
int i, p[4];
for (i=0; str[i]!='\0'; i++) {
if (str[i] ≥’A’ && str[i]≤’Z’)
p[0]++;
else if (str[i]≥’a’ && str[i]≤’z’)
p[1]++;
else if (str[i] ≥’0’ && str[i] ≤’9’)
p[2]++;
else
p[3]++;
return p;
}
}

oregon
15-09-2012, 11:52
Ti ho giเ detto che non puoi restituire p ma devi allocare dinamicamente il vettore.

pablito92
15-09-2012, 12:15
Originariamente inviato da oregon
Ti ho giเ detto che non puoi restituire p ma devi allocare dinamicamente il vettore.

cos์ invece ่ corretto?
Int *count(char *str) {
int i, *p;
p = (int *)calloc(4,sizeof(int));
for (i=0; str[i]!='\0'; i++) {
if (str[i] ≥’A’ && str[i]≤’Z’)
p[0]++;
else if (str[i]≥’a’ && str[i]≤’z’)
p[1]++;
else if (str[i] ≥’0’ && str[i] ≤’9’)
p[2]++;
else
p[3]++;
return p;
}
}

Who am I
15-09-2012, 22:27
Usa il tag code e indenta il codice cos์:



int *count(char *str)
{
int i, *p;
p = (int *)calloc(4,sizeof(int));
for (i=0; str[i]!='\0'; i++) {
if (str[i] ≥’A’ && str[i]≤’Z’)
p[0]++;
else if (str[i]≥’a’ && str[i]≤’z’)
p[1]++;
else if (str[i] ≥’0’ && str[i] ≤’9’)
p[2]++;
else
p[3]++;
}
return p;
}

Loading