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.


A voir également:

1 réponse

Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   1 106
 
$a = chaine
$b = remplacer dans $a "chaine cherchée" par "olarekerejfguerkzfgerukg"

si $a == $b
{
retourner "faux"
}
sinon
{
retourner "vrai"
}
0
kaoutherification
 
merci mais c pas ça ce que je charche
0
Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   1 106
 
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
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
Templier Nocturne Messages postés 7734 Date d'inscription   Statut Membre Dernière intervention   1 106
 
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
kaoutherification
 
merci c tres clair

merci bcp
0