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

Résolu
bouazza Messages postés 203 Date d'inscription   Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. bouazza Messages postés 203 Date d'inscription   Statut Membre 27
     
    Peut quelqu'un m'aider ? UP
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  3. bouazza Messages postés 203 Date d'inscription   Statut Membre 27
     
    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
  4. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Super l'essentiel c'est que tu aies trouvé la réponse ;-)
    0