IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Comparer deux chaine de caractères (vérification de mon algo svp)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Comparer deux chaine de caractères (vérification de mon algo svp)
    Bonjour tout le monde,

    J'aimerais créer un algorithme qui renvoi qui compare deux chaines de caractères.

    Il y'a donc chaine1 et chaine2.

    Chaques chaine se terminent par EOS (End of String)

    J'aimerais retourner 1 si chaine1 est plus grande que chaine2 :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
              0   1   2   3   4   5   6   7
            +---+---+---+---+---+---+---+---+
    Chaine1 | B | O | N | J | O | U | R |EOS|
            +---+---+---+---+---+---+---+---+
             (!)
              0   1   2   3
            +---+---+---+---+
    Chaine2 | A | M | I |EOS|
            +---+---+---+---+
             (!)
            B > A
    ===> 1
    Retourne - 1 si la première chaine est plus petite que la 2e chaine :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
              0   1   2   3   4   5   6   7
            +---+---+---+---+---+---+---+---+
    Chaine1 | B | O | N | J | O | U | R |EOS|
            +---+---+---+---+---+---+---+---+
                     (!)
              0   1   2   3   4   5   6   7
            +---+---+---+---+---+---+---+---+
    Chaine2 | B | O | N | S | O | I | R |EOS|
            +---+---+---+---+---+---+---+---+
                     (!)
                    N < S
    ===> -1
    Retourne 0 au cas où la chaine est la même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
              0   1   2   3   4   5   6   7
            +---+---+---+---+---+---+---+---+
    Chaine1 | B | O | N | J | O | U | R |EOS|
            +---+---+---+---+---+---+---+---+
     
              0   1   2   3   4   5   6   7
            +---+---+---+---+---+---+---+---+
    Chaine2 | B | O | N | J | O | U | R |EOS|
            +---+---+---+---+---+---+---+---+
     
    ===> 0
    Le problème est que si la chaine est plus longue que l'autre, je ne sais pas si EOS est considéré comme un caractère.

    Voici ce que j'ai fait, sauriez-vous me dire ce que vous en pensez ?

    Je doute surtout au niveau des ligne qui sont en rouge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    FONCTION ComparaisonDeuxChaines(Chaine1,Chaine2)
    
    Parametres Chaine1, Chaine2 : CHAINE DE CARACTERE[I];
    
    RETOUR : ENTIER;
    
    VARIABLE : Indice;
    
    DEBUT
    
    Indice = 0;
    
    TANT QUE ((Chaine1[Indice] || Chaine2[Indice])!=EOS) FAIRE
    	SI Chaine1[Indice] != Chaine2[Indice] ALORS
    		SI Chaine1[Indice] < Chaine2[Indice]  || Chaine1[Indice] == EOS ALORS
    			RETOURNER -1;
    			AUTRE SI Chaine[Indice] > Chaine2[Indice] || Chaine2[Indice] == EOS ALORS
    				RETOURNER 1;
    			FIN SI
    		FIN SI
    	FIN SI
    Indice++;
    FIN TANT QUE
    RETOURNER 0;
    FIN
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Qio,
    Citation Envoyé par beegees Voir le message
    Le problème est que si la chaine est plus longue que l'autre, je ne sais pas si EOS est considéré comme un caractère.
    Manifestement, tu veux obtenir l'ordre lexicographique.

    Par définition, EOS ne compte pas comme caractère de la chaîne.

    Si, lors d'une comparaison, on arrive à la fin de la chaîne la plus courte sans avoir trouvé de différence, la chaîne la plus longue est réputée être supérieure à la plus courte.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Qio,

    Merci pour ta réponse,

    Par définition, EOS ne compte pas comme caractère de la chaîne.
    Merci pour l'information importante.

    Si, lors d'une comparaison, on arrive à la fin de la chaîne la plus courte sans avoir trouvé de différence, la chaîne la plus longue est réputée être supérieure à la plus courte.
    OK mais est-ce que dans le code de l'algo, il faut le mentionner comme je l'ai fait dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI Chaine1[Indice] < Chaine2[Indice]  || Chaine1[Indice] == EOS ALORS
    			RETOURNER -1;
    			AUTRE SI Chaine[Indice] > Chaine2[Indice] || Chaine2[Indice] == EOS ALORS
    				RETOURNER 1;
    J'hésite aussi, dois-je mettre || ou && (voir les || bleus)

    Merci encore pour ton aide.

    beegees

  4. #4
    Rukia
    Invité(e)
    Par défaut
    A ta place je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tanque chaine 1[indice] !=eos && chaine 2[indice] !=eos  faire 
    Indice ++ ;
    /* j ai sortie de la boucle (boucle vide) après je test*/
    Si  chaine 1[indice] =eos && chaine2 [indice] =eos  return (0)
    sinon  si  chaine 1[indice] =eos  return(-1)
                  Sinon   return (1)
    bon courage

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Rukia-chan Voir le message
    A ta place je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tanque chaine 1[indice] !=eos && chaine 2[indice] !=eos  faire 
    Indice ++ ;
    /* j ai sortie de la boucle (boucle vide) après je test*/
    Si  chaine 1[indice] =eos && chaine2 [indice] =eos  return (0)
    sinon  si  chaine 1[indice] =eos  return(-1)
                  Sinon   return (1)
    bon courage

    Merci pour ta réponse.

    Est-ce que ta méthode tient compte des lettres différentes ?

    BONJOUR
    BONSOIR

    Ou est-ce seulement la partie EOS ?

    Merci encore.

    beegees

  6. #6
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par beegees Voir le message
    Est-ce que ta méthode tient compte des lettres différentes ?
    beegees
    non , juste la taille des chaines

  7. #7
    Membre éclairé Avatar de NiuAge
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 100
    Par défaut
    Tu peux faire un truc du genre

    Tant que chaine1[i] != eos et chaine2[i] != eos et chaine[i] == chaine2[i] faire
    i++;
    retourne(chaine1[i] - chaine2[i])
    ____

    Si > 0 alors chaine1 > chaine2
    si < 0 ... < ...
    si = 0 ... = ...

Discussions similaires

  1. Comparer deux chaines de caractères
    Par xenos dans le forum Delphi
    Réponses: 5
    Dernier message: 18/06/2007, 11h01
  2. Comparer deux chaines de caractères
    Par helww dans le forum C++
    Réponses: 10
    Dernier message: 24/04/2007, 11h26
  3. Réponses: 4
    Dernier message: 08/09/2006, 09h41
  4. Comparer deux chaines de caractères dans un if ?
    Par Xplosif² dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2006, 19h21
  5. comparer deux chaines de caractères
    Par peuf23 dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo