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 :

Comparaison de 2 str


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut Comparaison de 2 str
    Je compare 2 str de la facon suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (str1 == str2)
    {
        code code code code ...
    }
    else
    {
        code code code code ...
    }
    mon probleme est le suivant, le str1 vient d'un fichier txt et contient un saut de ligne a la fin du str tandis que str2 vient d'un fichier INI et ne contient pas de saut de ligne a la fin. comment puis-je les comparer pour que la condition ignore le saut de ligne?

  2. #2
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    tu l'enlèves en le remplaçant par un '\0'

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 51
    Par défaut
    comment je fait pour le remplacer?

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Tu parcours la chaine et lorsque tu lis '\n', tu le remplace par '\0'.
    En outre pour comparer des chaines de caracteres, il ne faut pas utiliser == (qui comparera les valeurs des pointeurs et donc les adresses des deux chaines) mais strcmp.

  5. #5
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    ba ta premiere chaine est ainsi : ta chaine\n\0 .
    alors tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str[strlen(str)-1]='\0' ; // remplace le \n par \0
    puis on compare pas les chaine avec == mais avec strcmp qui renvoie 0 si elles sont identiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(strcmp(str,str1) == 0 ) // egales
    Nas'

  6. #6
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut

    Tu peu utiliser la fonction strncmp(str1, str2, n)
    Si tu connais la longueur de tes chaines sources, je pense qu'il n'y aura pas de problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char str1[] = "test\n" ;
    char str2[] = "test" ;
    void main(void)
      {
      if(!strncmp(str1, str2, 4)) printf("Chaînes identiques\n") ;
                             else printf("Chaînes différentes\n") ;
      }
    Cela doit marcher sans effectuer des traitements sur tes chaînes.

    Voila...

  7. #7
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    strncmp n'est pas standard : elle n'existe pas sur Solaris. Alors faut faire gaffe à la portabilité.

  8. #8
    Membre confirmé

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par défaut
    Citation Envoyé par Metal Tom
    strncmp n'est pas standard : elle n'existe pas sur Solaris. Alors faut faire gaffe à la portabilité.
    strncmp() est standard, cf. 7.21.4.4

  9. #9
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut

    Désolé pour strncmp() , mais je pensais que si strcmp() est standard, alors strncmp l'était.
    Encore désolé pour cette bourde.

    Je pense que récrire la fonction strncmp() ne doit pas être bien compliqué, et simplifierai le test.

    Voila...

  10. #10
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Je ne vois pas l'utilité de réecrire la fonction strncmp() ici
    Sa première chaine contient un \n car il a certainement du la lire depuis un fgets.
    Tradiotionnelement, comme je l'ai mis plus haut, str[strlen(str)-1]='\0' devrait suffire, c'est meme indiqué dans la FAQ je crois
    Mais réecrire strncmp n'est pas difficile en effet

    Nas'

  11. #11
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut

    Bon je me suis penché sur la fonction strncmp(..) et j'ai pondu ça
    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
    /*- strncmp ----------------------------------------------------*/
    /* Compare la chaine str1 à str2 jusqu'à n caractères.          */
    /*     e : Chaines de caractères à comparer                     */
    /*       : Max de caractères à comparer                         */
    /*     s : Ret. <0 si str1<str2, =0 si str1=str2, >0 str1>str2  */
    /*--------------------------------------------------------------*/
    int strncmp(const char *str1, const char *str2, size_t n)
      {
      do
        {
        if(*str1-*str2) return (*str1-*str2) ;
        }
      while(*(str1++) && *(str2++) && --n) ;
      return 0 ;
      }
    Si cela peut convenir à tous les compilos je pense que cette fonction peut faire l'affaire !

    Voila...

  12. #12
    Membre confirmé

    Inscrit en
    Mai 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 39
    Par défaut
    Citation Envoyé par leneuf22
    Citation Envoyé par Metal Tom
    strncmp n'est pas standard : elle n'existe pas sur Solaris. Alors faut faire gaffe à la portabilité.
    strncmp() est standard, cf. 7.21.4.4
    Paragraphe de la norme :
    (cette fonction faisait déjà partie de la "norme de fait" de toute façon)
    Citation Envoyé par ISO
    7.21.4.4 The strncmp function
    Synopsis
    1) #include <string.h>
    int strncmp(const char *s1, const char *s2, size_t n);

    Description
    2) The strncmp function compares not more than n characters (characters that follow a null character are not compared) from the array pointed to by s1 to the array pointed to by s2.

    Returns
    3) The strncmp function returns an integer greater than, equal to, or less than zero, accordingly as the possibly null-terminated array pointed to by s1 is greater than, equal to, or less than the possibly null-terminated array pointed to by s2.

  13. #13
    Membre éprouvé Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par défaut
    Si vous faites un programme pour solaris n'utilisez pas strncmp : elle n'existe pas. Point.

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

Discussions similaires

  1. str : Comparaison et coef. de corrélation
    Par Stéphan_S dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/01/2013, 14h20
  2. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  3. Comparaison de fichier
    Par danzerg dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 11h49
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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