Spanaccio
05-01-2009, 18:53
Salve a tutti! Per cercare le occorrenze in un file ho trovato questo programma (che funziona perfettamente):
char nome[30];
char contenuto[100000];
char sequenza_da_cercare[100];
bool trovata;
bool sotto_sequenze(char v[], int m, char s[], int n)
{
for(int i=0; i <= (m-n); i++)
{
int j=0;
while(s[j]==v[i] && j<n)
{
j++;
i++;
}
if(j==n)
{
cout << "Stringa trovata in posizione " << i-n << '\n';
trovata=true;
}
}
return trovata;
}
int main()
{
char s,r;
int caratteri=0,seq=0;
ifstream file;
do
{
cout<<"OCCORRENZE:\n";
cout<<"Inserisci il nome del file:\n";
cin>>nome;
cin.get(s);
file.open(nome,ios::in);
if(!file)
{
cerr<<"*ERRORE* File non trovato\n";
}
while(file.get(contenuto[caratteri]) && caratteri<100000) caratteri++;//Prendo i singoli caratteri dal file e li copio nell'array
cout<<"Quale occorrenza vuoi cercare??\n";
while(cin.get(sequenza_da_cercare[seq]) && sequenza_da_cercare[seq]!='\n' && seq<100) seq++;
if ( sotto_sequenze(contenuto, caratteri, sequenza_da_cercare, seq) );
else cout << "sequenza non trovata. \n";
file.clear();
file.close();
cout<<"Vuoi analizzare un altro file?(y|n)";
cin>>r;
}while(r!='n');
Solo che trovo difficile comprendere il meccanismo. Ci sarebbe un metodo piu semplice??
char nome[30];
char contenuto[100000];
char sequenza_da_cercare[100];
bool trovata;
bool sotto_sequenze(char v[], int m, char s[], int n)
{
for(int i=0; i <= (m-n); i++)
{
int j=0;
while(s[j]==v[i] && j<n)
{
j++;
i++;
}
if(j==n)
{
cout << "Stringa trovata in posizione " << i-n << '\n';
trovata=true;
}
}
return trovata;
}
int main()
{
char s,r;
int caratteri=0,seq=0;
ifstream file;
do
{
cout<<"OCCORRENZE:\n";
cout<<"Inserisci il nome del file:\n";
cin>>nome;
cin.get(s);
file.open(nome,ios::in);
if(!file)
{
cerr<<"*ERRORE* File non trovato\n";
}
while(file.get(contenuto[caratteri]) && caratteri<100000) caratteri++;//Prendo i singoli caratteri dal file e li copio nell'array
cout<<"Quale occorrenza vuoi cercare??\n";
while(cin.get(sequenza_da_cercare[seq]) && sequenza_da_cercare[seq]!='\n' && seq<100) seq++;
if ( sotto_sequenze(contenuto, caratteri, sequenza_da_cercare, seq) );
else cout << "sequenza non trovata. \n";
file.clear();
file.close();
cout<<"Vuoi analizzare un altro file?(y|n)";
cin>>r;
}while(r!='n');
Solo che trovo difficile comprendere il meccanismo. Ci sarebbe un metodo piu semplice??