Buonasera.
Ho da svolgere per fini didattici la realizzazione di un "controllore ortografico" a mio piacere, ossia con le funzionalità che più mi piacciono.
Si tratta di inserire in input una stringa, valutare se è presente nel dizionario e stampare un eventuale messaggio di avvenuto/non avvenuto riscontro. Nel secondo caso si devono proporre anche i termini più simili.
#include "implementazioni.h"
void valutaTermine (string t)
{
ifstream f ( "dizionario.txt", ios::in );
if ( !f )
{
cout << "Errore nell'apertura del dizionario!\nControllare se è presente nel percorso del file.\n";
exit (1);
}
bool trovato = false;
string compare;
/* Ciclo per la prima verifica. La parola è presente nel dizionario? */
while ( !trovato && !f.eof() )
{
f >> compare;
if ( compare == t )
{
cout << t << " e' presente nel dizionario.\n";
trovato = true;
}
}
/* Se non ha riscontrato la parola, si preoccupa di trovarne una adatta */
if ( trovato == false )
{
cout << t << " non e' presente nel dizionario.\n";
trovaAlternative(f,t);
}
f.close();
}
void trovaAlternative (ifstream &f, string t)
{
int lunghezza = t.size(); // Lunghezza della stringa immessa
int sensibilita = lunghezza-3; // Variabile utile a stabilire quali sono le parole più affini
int pos = 0; // È la posizione dell'array di risultati
string cmp;
string vet[20];
f.seekg( 0 );
do
{
//cout << "Entro.\n";
int uguali = 0; // Vede quanti caratteri sono uguali nelle medesime posizioni
f >> cmp;
cout << cmp << '\n';
int cmpSize = cmp.size();
for ( int i = 0 ; i < lunghezza && i < cmpSize ; i++ )
{
if ( t[i] == cmp[i] )
{
uguali++; // Porta il conto
if ( uguali == sensibilita )
{
/* È in tal caso che capisce che quella stringa può essere la nostra soluzione */
vet[pos] = cmp;
pos++;
}
}
}
} while ( !f.eof() );
cout << "Le possibili alternative sono " << pos << ":\n";
for ( int i = 0 ; i < pos ; i++ )
{
cout << vet[i] << '\n';
}
}
Queste sono le implementazioni.
Il problema nasce nel secondo ciclo, il while che si occupa di trovare i "suggerimenti". Sembra che non mi dia la possibilità di entrarvi (ovviamente col "do" mi dà la possibilità di entrarvi una volta) ma poi è come se il ifstream non trovi niente, ossia non scrive mai in
cmp.
Quale può essere il problema?