PDA

Visualizza la versione completa : [C] Contare il numero di lettere in una stringa


marcusbasic
24-01-2007, 17:54
Chiedo aiuto a voi programmatori esperti, ho un esercizio in C che non riesco proprio ad impostare.
Mi viene chiesto di fare un programma che conti il numero di lettere in una stringa... ovvero.....

se la stringa "Ciao a tutti"... il programma stampa "C=1" "I=2" "A=2" "T=3" etc.

come posso cominciare?'? qualcuno ha programmi simili e mi pu postare il sorgente? :dh:

devil89
24-01-2007, 18:02
Potresti creare un array di lunghezza 21 (che sono le lettere dell'alfabeto) e lo inizializzi con tutti 0.
Scandisci la stringa e per ogni carattere letto, incrementi di 1 l'elemento dell'array con l'indice che corrisponde al numero della lettera letta dalla stringa.

Oppure, soluzione pi brutta, fai uno switch. :madai!?:

:ciauz: :ciauz:

marcusbasic
24-01-2007, 18:07
in che senso incrementare di uno l'indice?

devil89
24-01-2007, 18:10
Rileggi attentamente la frase che ho scritto...non ho detto di incrementare l'indice (che non ha senso) ma di incrementare il valore dell'elemento dell'array di indice corrispondente alla lettera dell'alfabeto.

Esempio:
se la lettera della stringa che hai letto la A, fai:
a[0] += 1; // si parte da 0 come ogni buon informatico

Ovviamente non che fai una serie infinita di if, ma utilizzo un ciclo

marcusbasic
24-01-2007, 18:18
grazie ora un'idea me la sono fatta... non che per avresti tipo un sorgente su cui posso aiutarmi?

devil89
24-01-2007, 18:34
va bh...te lo scrivo...

alcune cose evito di scrivertele per non perdere troppo tempo


char c, lett[22]; // lett[] un array contenente tutte le lettere dell'alfabeto
int presenze[21];

n=strlen(s);
for (i=0; i<n; i++)
for(j=0; j<21; j++)
if(s[i]==lett[j])
presenze[j]+=1;

// Per stampare le info
for(i=0; i<21; i++)
printf("%c = %d\n", lett[i], presenze[i]);

marcusbasic
24-01-2007, 18:37
a dir poco gentilissimo!

LeleFT
24-01-2007, 19:12
Originariamente inviato da devil89
va bh...te lo scrivo...

alcune cose evito di scrivertele per non perdere troppo tempo


char c, lett[22]; // lett[] un array contenente tutte le lettere dell'alfabeto
int presenze[21];

n=strlen(s);
for (i=0; i<n; i++)
for(j=0; j<21; j++)
if(s[i]==lett[j])
presenze[j]+=1;

// Per stampare le info
for(i=0; i<21; i++)
printf("%c = %d\n", lett[i], presenze[i]);

Con un solo ciclo for, un array in meno e nessun confronto ( :) ):


int presenze[21];

n=strlen(s);
for (i=0; i<n; i++)
presenze[s[i]-65] += 1;

// Per stampare le info
for(i=0; i<21; i++)
printf("%c = %d\n",(i+65), presenze[i]);

Attenzione che, anche nell'esempio di devil89, si presuppone che la stringa sia normalizzata.


Ciao. :ciauz:

marcusbasic
24-01-2007, 19:17
per i profani come me... cosa significa normalizzare la stringa?

zero85
24-01-2007, 19:17
Propongo un'altra modifica: usare un array di 26 in quanto esistono anche parole con k,j,y,w,x.



int presenze[26] = {0};

n=strlen(s);
for (i=0; i<n; i++)
presenze[s[i]-65]++;

// Per stampare le info
for(i=0; i<26; i++)
printf("%c = %d\n",(i+65), presenze[i]);

Loading