Aide pour une fonction C++ , HELP !!!!

Résolu/Fermé
bouazza Messages postés 188 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 7 avril 2006 - 31 janv. 2006 à 13:05
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 2 févr. 2006 à 21:01
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 :
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

bouazza Messages postés 188 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 7 avril 2006 27
31 janv. 2006 à 17:46
Peut quelqu'un m'aider ? UP
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
31 janv. 2006 à 21:34
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;
}
0
bouazza Messages postés 188 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 7 avril 2006 27
1 févr. 2006 à 22:08
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;
}
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
2 févr. 2006 à 21:01
Super l'essentiel c'est que tu aies trouvé la réponse ;-)
0