PDA

Visualizza la versione completa : RICERCA DI STINGHE IN C++ (vi metto alla prova)


albertogianotti
08-10-2002, 02:06
Ciao a tutti,
non lasciatevi confondere dal titolo non so nemmeno io come risolvere il problema:)

Allora io ho un file di testo gigantesco che contine (dopo dei caratteri a caso) queste stringhe

<inizio>blablabla<fine>

io devo estrarre dal file tutti i "blablabla" cio tutte quelle parole comprese tra <inizio> e <fine> (andrebbe bene anceh con <inizio> e <fine> inclusi...

MA COME SI FA?!?!?! STO IMPAZZENDO E' TUTTO IL GIORNO CHE CI PENSO!!!!!!!

HELP!!! :dh: :dh: :dh: :dh: :dh:

Andrea Simonassi
09-10-2002, 18:38
Oggi il tuo giorno fortunato, l'ho gi scritta io questa funzione.

Ricordami domani che te la posto (ce l'ho a casa)

albertogianotti
11-10-2002, 15:30
Davvero?!

Avevo perso le speranze oramai!!!

Ti ringrazio molto!!! :)))

Andrea Simonassi
11-10-2002, 16:27
string find_pat(string where, int * pos, string start, string end)
{
int pos2, pos3;
int work=1;

pos2=*pos;
while(work)
{
pos2 = where.find (end, pos2);
if(pos2 == string::npos) return string("");

pos3 = where.rfind (start, pos2);
if(pos3 == string::npos || pos3 < *pos)
{
pos2 = pos2 + end.length() ;
}
else
{
pos3 += start.length();
work=0;
}
}

*pos=pos2+end.length();
return where.substr (pos3, pos2-pos3);
}



usala cosi'


int pos = 0;
string s = find_pat("Salve, io sono una stringa", &pos, string("Salve,"), "sono una stringa");
cout << s;

albertogianotti
11-10-2002, 19:30
... ma quale dei due codici devo usare?

e poi mi dice undefine simbol "string" (?).

Percaso per VC++?

Grazie AL :)!

Andrea Simonassi
13-10-2002, 10:59
ESEMPIO:



#include <iostream>
#include <string>

using namespace std;

string find_pat(string where, int * pos, string start, string end);

int main()
{
int pos=0;
string t;
string s = "<inizio>...</fine>bla bla bla <inizio>\?\?\?</fine>";
while((t=find_pat(s, &pos, "<inizio>", "</fine>")) != "")
cout << t << endl;
return 0;
}

string find_pat(string where, int * pos, string start, string end)
{
int pos2, pos3;
int work=1;

pos2=*pos;
while(work)
{
pos2 = where.find (end, pos2);
if(pos2 == string::npos) return string("");

pos3 = where.rfind (start, pos2);
if(pos3 == string::npos || pos3 < *pos)
{
pos2 = pos2 + end.length() ;
}
else
{
pos3 += start.length();
work=0;
}
}

*pos=pos2+end.length();
return where.substr (pos3, pos2-pos3);
}

Loading