PDA

View Full Version : [C++] Consiglio per le occorrenze!


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??

cionci
06-01-2009, 09:39
Puoi usare la find di string per cercare una stringa all'interno di un'altra stringa: http://www.cplusplus.com/reference/string/string/find.html

Vincenzo1968
06-01-2009, 17:40
Qui trovi un bel po' di algoritmi:

http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

http://www-igm.univ-mlv.fr/~lecroq/string/node1.html

gugoXX
07-01-2009, 19:32
Se ti serve solo un risultato
se non e' un problema di programmazione
se non devi quindi includere il codice da nessuna parte
e stai usando Windows

(un po' di constraint...)
allora puoi usare il comando FIND, gia' pronto

Vincenzo1968
07-01-2009, 19:51
Se riesci a conservare il controllo quando tutti
Intorno a te lo perdono e te ne fanno una colpa;
Se riesci ad aver fiducia in te quando tutti
Ne dubitano, ma anche a tener conto del dubbio;
Se riesci ad aspettare e non stancarti di aspettare,
O se mentono a tuo riguardo, a non ricambiare in menzogne,
O se ti odiano, a non lasciarti prendere dall'odio,
E tuttavia a non sembrare troppo buono e a non parlare troppo saggio;

Se riesci a sognare e a non fare del sogno il tuo padrone;
Se riesci a pensare e a non fare del pensiero il tuo scopo;
Se riesci a far fronte al Trionfo e alla Rovina
E trattare allo stesso modo quei due impostori;
Se riesci a sopportare di udire la verità che hai detto
Distorta da furfanti per ingannare gli sciocchi
O a contemplare le cose cui hai dedicato la vita, infrante,
E piegarti a ricostruirle con strumenti logori;

Se riesci a fare un mucchio di tutte le tue vincite
E rischiarle in un colpo solo a testa e croce,
E perdere e ricominciare di nuovo dal principio
E non dire una parola sulla perdita;
Se riesci a costringere cuore, tendini e nervi
A servire al tuo scopo quando sono da tempo sfiniti,
E a tener duro quando in te non resta altro
Tranne la Volontà che dice loro: "Tieni duro!".

Se riesci a parlare con la folla e a conservare la tua virtù,
E a camminare con i Re senza perdere il contatto con la gente,
Se non riesce a ferirti il nemico né l'amico più caro,
Se tutti contano per te, ma nessuno troppo;
Se riesci a occupare il minuto inesorabile
Dando valore a ogni minuto che passa,
Tua è la Terra e tutto ciò che è in essa,
E - quel che è di più - sei un Uomo, figlio mio!

Rudyard Kipling


:bimbo: