Comparaison de chaines de caratères

cs_zoeline Messages postés 1 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 7 août 2008 - 7 août 2008 à 14:57
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 7 août 2008 à 19:53
Bonjour,
je cherche a créer une fonction qui permettrait losque l'on rentre deux chaines de caracteres,de renvoyer le pourcentage de ressemblance entre celles-ci.
j'ai trouvé un exemple en delphi mais comme je débute en programmation je ne comprend pas grand chose:

<li>Function ComparerChaines(s1,s2:String):Integer;
</li><li>{ Fonction comparaison chaînes de texte:
</li><li> Entrée:
</li><li> S1 = première chaîne a comparer, taille limitée a 2048 caractères
</li><li> S2 = deuxième chaîne a comparer, taille limitée a 2048 caractères
</li><li> Sortie:
</li><li> INTEGER, de 0 a 100, % de ressemblance entre les 2 chaînes }
</li><li>Var identiques, // Nombre de caractères identiques</li><li> p1,p2, // Indicateurs de position</li><li> l1,l2, // Longueurs des chaînes</li><li> pt, // Compteur de boucle</li><li> diff : Integer; // Facteur d égalisation</li><li> hstr : String; // Variable temporaire d échange des chaînes</li><li> test : Array [1..2048] Of Boolean; // Tableau d indicateur pour suivre les positions déjà testées</li><li>Begin
</li><li>// Tester les longueurs et échanger si S1 est plus courte, on teste toujours par rapport a la chaîne la plus longue</li><li> If Length(s1)<Length(s2) Then Begin
</li><li> hstr := s2;
</li><li> s2 := s1;
</li><li> s1 := hstr;
</li><li> End;
</li><li>// Stocker les longueurs des chaînes</li><li> l1 := Length(s1);
</li><li> l2 := Length(s2);
</li><li>// Une chaîne a vide ? alors la comparaison est de 0%</li><li> If (l1=0) Or (l2=0) Then
</li><li> Result := 0
</li><li> Else Begin
</li><li> p1 := 1;
</li><li> p2 := 1;
</li><li> identiques := 0;
</li><li>// Calculer le facteur d égalisation dépendant de la longueur de la chaîne, en général c est 1/3 de la longueur maximale</li><li> diff := Max(l1,l2) Div 3 + Abs(l1-l2);
</li><li>// Initialiser le tableau de suivi</li><li> For pt := 1 To l1 Do
</li><li> test[pt] := False;
</li><li>// Parcours de la chaîne</li><li> Repeat
</li><li>// Position testée ?</li><li> If Not test[p1] Then Begin
</li><li>// Caractère identique ?</li><li> If (s1[p1]=s2[p2]) And (Abs(p1-p2)<=diff) Then Begin
</li><li> test[p1] := True;
</li><li>// Augmenter le compteur de caractères identiques</li><li> Inc(identiques);
</li><li>// Positions suivantes</li><li> Inc(p1);
</li><li> Inc(p2);
</li><li>// Boucler</li><li> If p1>l1 Then p1:=1;
</li><li> End Else Begin
</li><li> Test[p1] := False;
</li><li> Inc(p1);
</li><li>// Boucler a la prochaine position de test si on arrive a la fin de la chaîne</li><li> If p1>l1 Then Begin
</li><li> While (p1>1) And Not (test[p1]) Do
</li><li> Dec(p1);
</li><li> Inc(p2)
</li><li> End;
</li><li> End;
</li><li> End Else Begin
</li><li> Inc(p1);
</li><li>// Boucler a la prochaine position de test si on arrive a la fin de la chaîne</li><li> If p1>l1 Then Begin
</li><li> Repeat
</li><li> Dec(p1);
</li><li> Until (p1=1) Or test[p1];
</li><li> Inc(p2);
</li><li> End;
</li><li> End;
</li><li> Until p2>Length(s2);
</li><li>// Calculer la valeur en pourcentage</li><li> Result := 100 * identiques Div l1;
</li><li> End;
</li><li>End;
</li>
Si vous pouviez m'aider a le transcrire en c#, je vous serait reconnaissante!! :)
voila, bonne journée!!

2 réponses

ofonadroite Messages postés 130 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 13 août 2008 2
7 août 2008 à 17:00
Salut,

J'avais commencée à te le traduire puis j'ai réfléchie et je me suis dit que ça ne t'aiderai absolument pas. Tu devrai avant tout essayer de créer un algorithme et ensuite demander conseil sur la syntaxe ! Je passe peut être un peu pour une moralisatrice mais il ne faut pas oublier que le forum n'est pas là pour faire le travail à ta place mais pour t'aider pas à pas.
N'hésite pas à me demander des conseils.
@Pluche

<hr />
Si une réponse vous convient n'oubliez pas le réponse acceptée !!!
Ca aidera beaucoup d'autres personnes
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 août 2008 à 19:53
0
Rejoignez-nous