Ciao, ho provato il tuo codice ma a me funziona correttamente. Nel file input.txt ho inserito solo la parola "Ciao" (senza virgolette) e nel file output.txt ho trovato
Doeu
con una riga bianca alla fine del file, però nessuna 'y'. Sicuro che a te presenti quel comportamento?
Comunque, per divertimento, ho provato a riscrivere il programma in un modo che utilizza più funzioni. Se ti va puoi dare un'occhiata e provare a vedere se ti è chiaro...
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctype.h>
using namespace std;
bool isVocale(char c);
char cifraCarattere(char c);
char cifraConsonante(char c);
char cifraVocale(char c);
char cifraNumero(char c);
char consonanti[]={'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z'};
char vocali[]={'a', 'e', 'i', 'o', 'u', 'y'};
char numeri[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
int main(int argc, char** argv)
{
char c;
bool maiuscolo;
fstream inp,outp;
inp.open("input.txt",ios::in);
outp.open("output.txt",ios::out);
if(!inp)
{
cout<<"File non trovato!\n";
}
while(!inp.eof())
{
inp.get(c);
if(isalnum(c))
{
if(isupper(c)) maiuscolo = true;
else maiuscolo = false;
c = tolower(c);
c=cifraCarattere(c);
if(maiuscolo) c = toupper(c);
}
outp<<c;
}
inp.close();
outp.close();
return 0;
}
bool isVocale(char c)
{
if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') return true;
return false;
}
char cifraCarattere(char c)
{
if(isVocale(c)) return cifraVocale(c);
else if(isdigit(c)) return cifraNumero(c);
return cifraConsonante(c);
}
char cifraConsonante(char c)
{
for(int i=0; i<20; i++)
{
if(consonanti[i] == c)
{
if(i<19) return consonanti[i+1];
return consonanti[0];
}
}
return '0'; /* inutile: elimina un warning */
}
char cifraVocale(char c)
{
for(int i=0; i<6; i++)
{
if(vocali[i] == c)
{
if(i<6) return vocali[i+1];
return vocali[0];
}
}
return '0'; /* inutile: elimina un warning */
}
char cifraNumero(char c)
{
for(int i=0; i<10; i++)
{
if(numeri[i] == c)
{
if(i<10) return numeri[i+1];
return numeri[0];
}
}
return '0'; /* inutile: elimina un warning */
}