devo aggiungere questi tag o c’è una sezione con questi tag, se è così dove la trovo
Ti ho aggiunto il tag CODE modificando il post. Qui trovi la spiegazione su come va utilizzato il tag ->
info bbcode.
A colpo d'occhio comunque ci sono già un paio di errori visibili: nella
costruzioneNome
dentro all'if fai questa operazione:
C++:
consonanti[c]=cod.nome[i];
if(consonanti[c]==cod.nome[i]){
c++;
}
stai già assegnando la lettera, non ha senso fare il confronto, saranno uguali per forza di cose.
Non capisco nemmeno la creazione di questi array di caratteri:
C++:
char consonanti[255];
char vocali[255];
(255 sono tantini...).
Cosa che andrei però a modificare subito, è l'utilizzo degli array di caratteri per le stringhe: ve l'ha detto il prof o è stata una tua scelta? Stai usando C++, sarebbe meglio utilizzare
string
. Se non puoi, allora ok, ma nel for non serve che scorri sino a che trovi il carattere
\0
, dovresti scorrere sino al termine della lunghezza dell'array (usando strlen).
Potresti provare ad ottimizzare un pò il codice: per esempio, dopo la lettura di nome e cognome, trasformi tutto in maiuscolo. Puoi anche crearti una funzione 'is_vocale' per evitare tutto quel codice, una cosa come:
C++:
int is_vocale(char ch) {
return 'A' == ch || 'E' == ch || 'I' == ch || 'O' == ch || 'U' == ch;
}
Per fare un esempio ulteriore:
C++:
int v = 0, c=0;
char vocali[strlen(cod.nome)];
char consonanti[strlen(cod.nome)];
for(int i=0; i < strlen(cod.nome); i++) {
char ch = cod.nome[i];
if(is_vocale(ch)) vocali[v++] = ch;
else consonanti[c++] = ch;
}
Ad ogni modo, a parte questi consigli (ci sarebbero altre cose da sistemare un pò, ma si può sorvolare ora), ci sono un paio di errori.
Nella funzione
caratteriNascita
il controllo lo fai 2 volte sulla lettera 'M' invece che 'm' e 'M'.
La dimensione degli array nel main è errata: non stai allocando spazio per il carattere terminatore; dovresti dichiararli di 1byte più grandi:
C++:
char nome[4];
char cognome[4];
char nascita[6];
Sarebbe meglio anche inizializzarli per accertarsi che sia tutto a
\0
.
C++:
char nome[4] = {'\0'};
char cognome[4] = {'\0'};
char nascita[6] = {'\0'};