Chercher si une chaine existe dans une autre

kaoutherification -  
 kaoutherification -
Bonjour,

Svp aider moi à écrire une fonction s_chaine (en algorithmique) qui retourne vrai si une sous-chaine Sch est contenue dans une chaine Ch, faux sinon et ça sans utliliser la fonction prédifinie pos(ch1,ch2).

merci d'avance.

1 réponse

  1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    $a = chaine
    $b = remplacer dans $a "chaine cherchée" par "olarekerejfguerkzfgerukg"

    si $a == $b
    {
    retourner "faux"
    }
    sinon
    {
    retourner "vrai"
    }
    0
    1. kaoutherification
       
      merci mais c pas ça ce que je charche
      0
    2. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      si...

      tu cherche une chaine dans une autre, donc si tu remplace la chaine cherchée par autre chose dans la première chaine, elle n'y est plus.

      du coup : soit elle y était au départ => la première chaine est différente de la modifiée
      soit elle n'y était pas => on n'a rien changé à la première chaine, du coup les deux chaines sont identiques

      aprés, tu peux faire ça plus basiquement et moins efficacement en explosant ta chaine cherchée, puis en parcourant la chaine à la recherche des lettres de la chaine cherchée.

      si t'en as vraiment besoin, je te montre comment faire, mais si tu peux t'en passer, ça m'arrange ;)
      0
    3. kaoutherification
       
      je propose cet algorithme et dite moi si c juste ou non:

      Fonction s_chaine(ch,sch:chaine):booléen
      variables
      i,j:entier
      trouve:booléen
      Début
      i<--1
      J<--1
      trouve<--faux
      Tantque(i<=long(ch)) et(trouve=faux) faire

      Tantque(j<=long(sch)) faire

      si (sch[j]=ch[i]) alors
      i<-i+1
      j<-j+1
      trouve<-vrai
      sinon
      i<-i+1
      trouve<-faux
      finsi
      FinTQ
      j<-1
      FinTQ
      s_chaine<-trouve

      Fin
      0
    4. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      je ne comprend rien à ton algo :/

      tant pis, je t'en fait un, tu comparera...

      $a = "chaine originale"
      $b = "ce qu'on cherche"
      $n = 1
      
      tant qu'il y a des caractères
      {
      lire le caractère $n  de $b et le stoker dans $t[$n]
      $n ++
      }
      
      $c = 0
      $z = 1
      
      tant qu'il y a des caractères
      {
           lire le caractère $c + de $z et le stoker dans $r
           si $r = $t[$z]
           {
                tant que $r = $t[$z]
                si $z == $n
                {
                     retourner "vrai"
                }
                $z ++
                lire le caractère $c + $z de $a et le stoker dans $r
           }
          $z = 0
          $c ++
      }
      


      voilà, ça te donne un truc du genre :)
      0
    5. kaoutherification
       
      merci c tres clair

      merci bcp
      0