Salve sto letteralmente impazzendo come già impazzito lo è il programma. Nel "code" trovate il mio codice con descrizione i problemi sono questi:
- Il programma me lo compila, quando ad esempio inserisco "ciao" mi conta quanti caratteri sono, vocali e consonanti ma non quante volte si ripete una lettera
- Se inserisco la stessa parola compilando più volte, mi va in loop ed esce "Errore di segmentazione (core dump creato)". Non so assolutamente cosa sia.
- Ci sono altri errori di compilazione che potrebbero essere abbreviati?
Ringrazio in anticipo
/* Programma che legge una frase introdotta da tastiera. La frase termina con l'introduzione di invio da tastiera. La frase contiene
sia caratteri minuscoli che caratteri maiuscoli, e complessivamente 100 caratteri. Il programma deve stampare:
- Per ognuna delle lettere dell'alfabeto, il numero delle volte che essa compare nella stringa
- Il numero di consonanti e vocali presenti nella stringa */
#include <iostream>
#include <cstring>
using namespace std;
const int MAXDIM = 100; // dimensione massima stringa di caratteri
const int ALFABETO = 26; // numero lettere alfabeto
int main () {
char frase[MAXDIM]; // stringa di caratteri inserita
int lung_stringa; // lunghezza stringa di caratteri inserita
int vocali, consonanti; // contatore vocali e consonanti
int contatori[ALFABETO]; // contatore lettere alfabeto
int posizione_alfabeto; // posizione nell'alfabeto di una lettera
int i; // cicli
cout << "\nInserisci una frase (massimo " << MAXDIM << " caratteri): ";
cin >> frase;
lung_stringa = strlen (frase);
cout << "\nLa frase inserita e': " << frase;
cout << "\nLa frase inserita contiene " << lung_stringa << " caratteri (compresi gli spazi)\n";
for (i = 0; i < ALFABETO; i++)
contatori[i] = 0;
for (i = 0; i < lung_stringa; i++)
{
if (frase[i] >= 'A' && frase [i] <= 'Z')
{
posizione_alfabeto = frase[i] - 'A';
contatori[posizione_alfabeto] ++;
}
else
{
if (frase[i] >= 'a' && frase[i] <= 'z')
{
posizione_alfabeto = frase[i] - 'a';
contatori[posizione_alfabeto] ++;
}
}
}
for (i = 0; i < contatori[ALFABETO]; i= i+1)
cout << "La lettera " << 'A' + 1 << " compare " << contatori[i] << " volte";
vocali = contatori ['A' - 'A'] + contatori ['E' - 'A'] + contatori ['I' - 'A'] +
contatori ['O' - 'A'] + contatori ['U' - 'A'];
consonanti = 0;
for (i = 0; i < ALFABETO; i++)
consonanti = consonanti + contatori[i];
consonanti = consonanti - vocali;
cout << "Il numero di vocali e': " << vocali << endl;
cout << "Il numero di consonanti e': " << consonanti << endl;
return 0;
}