Il problema lo ha illustrato SpeedJack, ma c'è ne sono altri: stai cancellando gli spazi, accorciando la stringa, ma poi fai un ciclo in base alla lunghezza precedente, il che risulta in una lettura fuori dal buffer e il conseguente undefined behavior. Poi non resetti il contatore delle consonanti tra una stringa e l'altra e infine le vocali maiuscole e i simboli (punti, virgole, numeri ecc) verranno contati come consonanti. Ti scrivo la mia idea sul come risolvere tutti questi problemi:
C++:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n_frasi;
string frase;
cout << "Quante frasi vuoi analizzare? ";
cin >> n_frasi;
cin.ignore();
while (n_frasi--)
{
cout << "Inserisci la frase: ";
getline(cin, frase);
int len = frase.size();
int c, consonanti = 0, vocali = 0;
for (int i = 0; i < len; i++)
{
c = frase[i];
if ('a' <= c && c <= 'z')
c -= 32;
if ('A' <= c && c <= 'Z')
{
if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
vocali++;
else
consonanti++;
}
}
cout << "Frase: " << frase << endl
<< "N. Caratteri: " << len << endl
<< "N. Lettere: " << (consonanti + vocali) << endl
<< "N. Consonanti: " << consonanti << endl
<< "N. Vocali: " << vocali << endl;
}
return 0;
}