Aide pour une fonction C++ , HELP !!!!
Résolu
Salut tout le monde , j'ai réussi à réaliser une fonction qui cherche chaine1 dans chaine2 , elle renvoie le nombre de fois dont elle l'a trouvée et 0 si ce n'est pas le cas , mais je veux un peu la renforcer , pour qu'elle ignore la recherche des ? , par exemple , elle doit trouver BO?AZ?? dans BOUAZZA et BOLZKK .... , le point d'interrogation doit remplacer un seul caractére , peut quelqu'un m'aider ?
Voici le code source de ma premiére fonction , si quelqu'un peut l'adapter pour ignorer les ? , je suis preneur :
merci pour toute réponse postée !
Voici le code source de ma premiére fonction , si quelqu'un peut l'adapter pour ignorer les ? , je suis preneur :
int recherche(std::string Texte , std::string Motif){ //recherche un motif "Motif" dans une chaine "Texte"
int i;
int sortie=0;
for (i=0 ; i<Texte.length() ; i++){
if (Texte.substr(i,Motif.length())==Motif){
sortie++;
}
}
return(sortie); //retourne 1 si le motif est trouvé , et 0 si ce n'est pas le cas
}
merci pour toute réponse postée !
4 réponses
-
-
Et pourquoi ne pas directement utiliser la lib pcre pour avoir direct les expressions régulières ?
Voilà sinon j'attire ton attention sur les fonctions :
- strstr de la lib C :
http://www.hmug.org/man/3/strstr.php
- et find de la STL associé à la classe std::string :
http://www.cppreference.com/cppstring/find.html
Et pour ta fonction :
bool is_matching( const std::string & texte, const std::string & motif ){ for(std::size_t i=0;i<texte.length();++i){ if (motif[i]=='?') continue; else if(motif[i]!=texte[i]) return false; } return true; } -
Salut , merci , mais je me suis peut etre pas bien expliqué , ta fonction compare par ex : bou?z?? avec bouazza et donne le resultat , mais moi je voulait qu'elle cherche le motif , mais merci , car ta fonction m'a aidé à réaliser celle-ci qui cherche un motif dans un texte en ignorant les ? :
bool recherche( const std::string & texte, const std::string & motif ){ std::string texte1; bool sortie; for (int j=0;j<texte.length();j++){ texte1=texte.substr(j,motif.length()); for(std::size_t i=0;i<motif.length();++i){ if ((motif[i]!='?' && motif[i-1]=='?')||(motif[i]!='?' && i=='0')) sortie=true; if (motif[i]=='?') continue; else sortie=sortie * (motif[i]==texte1[i]); } if (sortie==true) return(true); sortie=false; } return false; } -
Super l'essentiel c'est que tu aies trouvé la réponse ;-)