Ciao a tutti, ho il seguente programma da scrivere: scrivere un programma in C++ che, letti da input un intero positivo N, un intero positivo M e una stringa di al più 100 caratteri, stampi “OK” se esistono almeno N vocali che precedono di esattamente M consonanti un’altra vocale e stampi “NO” altrimenti. Si può supporre che la stringa contenga solo lettere dell’alfabeto minuscole.
Mi funzionano tutti i casi tranne quello in cui il numero di vocali è pari a 0, ho provato a gestirlo cosi:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int N,M,num=1,cont=0;
string A;
bool cond = false,ok = false;
cin>>N>>M;
cin>>A;
if(M!=0)
{
cout<<"La dimensione di A quando entro nell'if: "<<A.size()<<endl;
for(unsigned int i=0;i<A.size();i++)
{
if( (A == 'a' ) || (A == 'e') || (A == 'i') || (A == 'o') || (A == 'u') )
{
cout<<"Vocale con cui entro: "<<A<<endl;
while(num <= M)
{
if((A[i+num] != 'a') && (A[i+num] != 'e') && (A[i+num] != 'i') && (A[i+num] != 'o') && (A[i+num] != 'u'))
{
cout<<"Consonante "<<num<<": "<<A[i+num]<<endl;
cond = true;
}
else
{
cout<<"La lettera in questo caso e' -> "<< A[i+num] << ",una vocale quindi esco e riparto. "<<endl;
cond = false;
num=1;
break;
}
num++;
}
if(cond)
{
if((A[i+M+1] == 'a') || (A[i+M+1] == 'e') || (A[i+M+1] == 'i') || (A[i+M+1] == 'o') || (A[i+M+1] == 'u'))
{
cout<<"Vocale con cui esco: "<<A[i+M+1]<<endl;
cont++;
i = i+M;
if(cont == N)
{
ok = true;
break;
}
}
else
{
cout<<"Non trovo una vocale la sequenza dunque non e' valida "<<endl;
cond = false;
ok = false;
}
num=1;
}
}
if(ok)
break;
}
}
else
{
cout<<"La dimensione di A quando entro nell'else e': "<<A.size()<<endl;
for(int i=0;i<A.size();i++)
{
if((A == 'a' ) || (A == 'e') || (A == 'i') || (A == 'o') || (A[i] == 'u'))
{
cout<<A[i]<<" "<<A[i+1]<<endl;
if(A[i] == A[i+1])
{
if( N == 1)
{
ok = true;
break;
}
}
}
}
}
if(ok)
cout<<"OK";
else
cout<<"NO";
}
Nel momento in cui però entro nell'else corrispondente alla prima if, la dimensione di A non sarà il numero di lettere che leggo in A ma solamente 1, qualcuno potrebbe spiegarmi perchè?