Salut,
J'aimerais réaliser une fonction qui, à partir d'un string passé en parametre, réalise les opérations suivantes :
- Récupère la sous_chaine entre les mots "SI" et "ALORS" de la chaine
- Dans cette sous_chaine, sépare tout les mots avec comme séparateur le string "ET" et récupère chaque sous_sous_chaine dans un tableau de string
- Pour chaque string du tableau extrait les 2 string séparés par un opérateur (typiquement := ou > ou <).
En gros, à partir de cette chaine:
SI mot1:=valeur1 et mot2>valeur2 Alors mot3<Valeur3
J'obtients
1/ "mot1:=valeur1 et mot2>valeur2"
2/ "mot1:=valeur1";"mot2>valeur2"
3/ "mot1";":=";"valeur1"
"mot2";">";"valeur2"
Voila mon code:
mais je n'arrive pas à séparer les mots autour de ET.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 void parsecond(string LigneAParser){ string cond; // Mettre en majuscule transform(LigneAParser.begin(), LigneAParser.end(), LigneAParser.begin(), static_cast<int (*)(int)>(toupper)); // Parse la LigneAParser entre le "si" et le "alors" size_t deb = LigneAParser.find("SI",0)+3; cout<<deb; getchar(); size_t fin = LigneAParser.find("ALORS")-3; cout<<"\n"<<fin; getchar(); cond = LigneAParser.substr(deb,fin); cout<<cond<<endl; // Parse les "et" dans la sous chaine récupérée int k=0; string tab[10]; size_t sep; while(cond.find("ET")==true){ sep = cond.find("ET"); cout<<sep<<"huhu"<<endl; getchar(); tab[k] = cond.substr(0,sep-1); cout<<"Iteration :"<<k<<" "<<tab[k]<<endl; getchar(); cout<<cond<<"haha"<<endl; cond.erase(0,sep+3); cout<<cond<<"hihi"<<endl; getchar(); if(k==9) break; k++; } }
J'ai vu dans la FAQ des choses concernant boost::tokenizer
Quelqu'un peut il m'éclairer plus sur cette méthode et me dire si ca pourrait convenir à mon problème ?
Merci beaucoup à tous
Oti$
Partager