//XXX legge a parola e di conseguenza non ignora caratteri non alfabetici //ROBERTO D'ANGELO MATR.155962 E-MAIL ROBERTODANGEL@LIBERO.IT #include <fstream.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAX_PAROLA 20 //lunghezza accettabile della parola #define CAR_NULL 1 //carattere nullo char inserisci_carattere(); int main() { //XXX main deve restituire int char file[40];// 40 è un valore accettabile per un nome file char chok; int cont=0,max=0,min=0; //FIXME era piu' ragionevole fissare min ad un valore molto alto int lungh=0; bool okparola;//flag di controllo aumento contatore // richiesta nome file char parola[MAX_PAROLA+CAR_NULL]; cout<<"inserire il nome del file da leggere\n"; cin>>file; // apro il file ifstream fin(file); if (!fin){ cerr << "Errore: file input non puo' essere aperto.\n"; exit(1); } //procedura di inserimento carattere chok=inserisci_carattere(); if(!chok) return -1; //XXX aggiustato //ciclo di lettura del file parola per parola while(fin>>parola){ //FIXME non del tutto corretto, in questo caso vengono considerati anche altri caratteri oltre a quelli alfabetici okparola=false; lungh=strlen(parola); for( int i=0;i<lungh;i++) if (parola[i]==chok) { okparola=true; if (lungh <= min || min==0) min=lungh; if (lungh >= max) max=lungh; }// FIXME le operazioni fatte sono sensate ma a questo punto era meglio uscire dal ciclo if(okparola) cont++; } //Output cout<<"Il file contiene:\n"<<cont<<" parole contenenti il carattere '"<<chok<<"'"; cout<<"\nla lunghezza minima delle parole e':"<<min; cout<<"\nla lunghezza massima delle parole e':"<<max<<"\n"; fin.close(); return 0; //XXX aggiunto } char inserisci_carattere(){ char ch; cout<<"inserire il carattere da ricercare \n"; cin>>ch; if (!isalpha(ch)){ cout<<"Carattere non corretto\n"; return 0; //XXX era piu' elegante ripetere la richiesta } return ch; }