PDA

View Full Version : [C] Numero occorrenze delle lettere


.phoenix
09-07-2013, 16:18
Salve a tutti mi sono bloccato su un problema....
Ecco il testo:
Sviluppare una function che, dati come parametri di input una stringa che rappresenta un testo in italiano, determina e restituisce come parametro di output l'array (di size 21) del numero delle occorrenze delle 21 lettere dell'alfabeto italiano.

ecco la function gia sviluppata:

void conta_lettere(char a[], Alfabeto b[])
{
int i,j,n;
n=strlen(a);
for(i=0;i<n;i++)
{
for(j=0;j<21;j++)
{
if(a[i]==b[j].lettera)
b[j].quantita++;
}
}
}
e ho anche un commento:
//Alfabeto è una struct con campi {char lettera; int quantita}//

Come la dichiaro la struct? Non capisco come iniziare...grazie :)

The_ouroboros
09-07-2013, 16:30
Credo tu debba lavorare di codifica ascii x poter risalire al numero della lettera ed incrementare così l'indice dell array corrispondente..

Un idea in c++ la trovi qui:
http://ideone.com/r9xh11

Inviato con il mio Xperia P

Spe!
11-07-2013, 08:17
La struct la dichiarerei così


struct _alpha{
char lettera;
int quantita;
};


Se vuoi lavorare più comodamente puoi fare anche un typedef, dato che la variabile che passi alla funzione è di tipo Alfabeto. ;)

sottovento
11-07-2013, 08:25
la struttura le definisci come

typedef struct
{
char lettera;
int quantita;
} Alfabeto;


Ops, abbiamo scritto allo stesso tempo. Pardon!

.phoenix
11-07-2013, 14:51
ok quindi questa è la dichiarazione della struct
typedef struct
{
char lettera[21];
int quantita;
} Alfabeto;

e questa invece la dichiarazione dei campi

Alfabeto conta[21]={
{'a',0},
{'b',0},
.............
{'z',0}};

giusto?

Spe!
11-07-2013, 18:50
Non è un vettore di caratteri, ma un carattere soltanto, altrimenti sono un po' troppi. :D

Ogni record della "tabella" contiene 2 campi: uno con la lettera, uno con la quantità di questa lettera.

typedef struct {
char lettera;
int quantita;
} Alfabeto;

Poi dichiari il vettore di strutture, come hai fatto tu, inizializzandolo. ;)


Se vuoi, puoi inizializzarlo più velocemente con un ciclo for, sfruttando i codici decimali dei caratteri ASCII.


char lettera;
int i;

for(lettera = 'a', i = 0; i < 21; lettera++, i++){
if(lettera == 'j' || lettera == 'k', || lettera == 'w' || lettera == 'x' || lettera == 'y') i--;
else conta[i].lettera = lettera;
}

for(i = 0; i < 21; conta[i].quantita = 0, i++);