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

 C Discussion :

egalité de deux chaînes de caractères à n éléments près


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Par défaut egalité de deux chaînes de caractères à n éléments près
    Salut tous,

    L'idée est simple : mettre au point une fonction qui teste si les n premiers caractères de deux chaînes sont égales, renvoie 1 le cas échéant, 0 sinon.

    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
    26
    27
    28
    29
    30
    31
    32
     
    int egal_n_ch(int n, char ch1[], char ch2[])
    {
        int rtn;//la valeur retournée
        int i=1;// compteur
        if(n>strlen(ch1) || n>strlen(ch2)) rtn=0; // cas où l'on dépasse les tailles des chaînes
        else
        {
            if(ch1[0]==ch2[0])
            {
                while(ch1[i]==ch2[i] && i<=n)
                {
                  i++;
                }
     
                if(i==n) rtn=1; // on a égalité des n premiers caractères !
            }
            else rtn=0;
        }
     
        return rtn;
    }
     
    int main()
    {
     
        char  ch1[]="achille";
        char  ch2[]="achillus";
        printf("%d",egal_n_ch(4,ch1,ch2));
     
        return 0;
    }
    A ma surprise, le résultat est invariablement 16384, et donc ? Voilà, si vous comprenez quelque chose, moi je sèche...Merci tous.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bounadalvidal Voir le message
    Salut tous,

    L'idée est simple : mettre au point une fonction qui teste si les n premiers caractères de deux chaînes sont égales, renvoie 1 le cas échéant, 0 sinon.

    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
    26
    27
    28
    29
    30
    31
    32
     
    int egal_n_ch(int n, char ch1[], char ch2[])
    {
        int rtn;//la valeur retournée
        int i=1;// compteur
        if(n>strlen(ch1) || n>strlen(ch2)) rtn=0; // cas où l'on dépasse les tailles des chaînes
        else
        {
            if(ch1[0]==ch2[0])
            {
                while(ch1[i]==ch2[i] && i<=n)
                {
                  i++;
                }
     
                if(i==n) rtn=1; // on a égalité des n premiers caractères !
            }
            else rtn=0;
        }
     
        return rtn;
    }
     
    int main()
    {
     
        char  ch1[]="achille";
        char  ch2[]="achillus";
        printf("%d",egal_n_ch(4,ch1,ch2));
     
        return 0;
    }
    A ma surprise, le résultat est invariablement 16384, et donc ? Voilà, si vous comprenez quelque chose, moi je sèche...Merci tous.
    C'est pas parce que tu débutes qu'il t'est interdit de réfléchir. Le printf() est un outil vachement utile. Il n'y a pas que les forum quoi...

    Tu testes i<=n donc quand i arrive à 4 ben il passe à 5. Ensuite, comme i différent de n, ben rtn n'est pas rempli à 1. Et comme il n'a pas été initialisé...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Pour ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int i=1;// compteur
    if(ch1[0]==ch2[0])
            {
                while(ch1[i]==ch2[i] && i<=n)
                {
                  i++;
                }
     
                if(i==n) rtn=1; // on a égalité des n premiers caractères !
            }
    Pourquoi ne pas faire simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int i=0;// compteur
     
                while(ch1[i]==ch2[i] && i<=n)
                {
                  i++;
                }
     
                if(i==n) rtn=1; // on a égalité des n premiers caractères !
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    strncmp() ne te convient pas ?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par matafan Voir le message
    strncmp() ne te convient pas ?
    Arf, à mon avis il s'agit d'un TP...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Moi, je renforcerai ce qu'a dit Sev@r
    Ensuite, comme i différent de n,
    ne jamais tester avec '==' dans ce genre de test de compteur, mais utiliser '<=' ou '>='.

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Arf, à mon avis il s'agit d'un TP...
    Non monsieur, ça l'est pas ! Je me fais de l'exercice, question d'accélérer l'apprentissage. Vous ne trouvez pas utile de répondre, ne le faîtes pas ! si je rejoins ce forum c'est bien pour son atmosphère accueillante...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Concaténer deux chaînes de caractères
    Par fafabzh6 dans le forum R
    Réponses: 2
    Dernier message: 21/03/2008, 21h03
  2. Réponses: 4
    Dernier message: 07/06/2007, 22h35
  3. Comparer deux chaînes de caractère
    Par natie_49 dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2007, 11h53
  4. Réponses: 3
    Dernier message: 16/03/2007, 22h22
  5. Comparer deux chaînes de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 10/12/2006, 14h30

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