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 :

lecture de chaine et comparaison


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut lecture de chaine et comparaison
    Re Bonjour,

    Existe-t-il une fonction permettant de comparer les dernières lettres d'une chaine avec une autre?
    En fait, je récupère un nom de fichier passé en ligne de commande avec argv[1] et je veux vérifier que ce nom de fichier est bien de la forme *.bmp pour poursuivre l'exécution de mon programme. J'ai donc besoin de comparer la fin du nom entré par l'utilisateur avec ".bmp" (le point est compris dedans).

    Merci pour vos indications.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strstr(nomFichier, ".bmp")

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Dans string.h tu as les fonctions qui ont trait aux chaînes de caractères. Tu as strcmp (voir le manuel pour l'utilisation) qui permet la comparaison entre 2 chaînes.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Stabia Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strstr(nomFichier, ".bmp")
    Je rappelle la demande du P.O.:
    Existe-t-il une fonction permettant de comparer les dernières lettres d'une chaine
    Ce que tu proposes fait une recherche de présence, mais on ne sait pas si c'est à la fin...

    "xxx.bmp.yy"

    Il faut plutôt utiliser strlen() et strncmp()...

    Ou la recherche du dernier '.' avec strrchr() et tester la suite...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Par défaut
    J'ai donc besoin de comparer la fin du nom entré par l'utilisateur avec ".bmp"
    donc 'strstr' puis le test du 0 à pointeur + 4.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Stabia Voir le message
    donc 'strstr' puis le test du 0 à pointeur + 4.
    Joli rattrapage.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Par défaut
    A part vous tout le monde avait complété.

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Stabia Voir le message
    A part vous tout le monde avait complété.
    C'est possible, mais je n'en ai pas la preuve. Dans le doute, je préfère être précis. Les sous-entendus ne concernent en général que ceux qui les émettent...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut
    j'ai utilisé strspn() pour voir si .bmp est présent dans la chaine entrée par l'utilisateur. Le problème c'est que si il entre "mbp.jpg" ca va quand même marcher car les lettres b,m et p sont présentes.

    J'ai donc 2 questions:

    1/ j'ai pu voir que d'autre fonction str... renvoie des pointeurs, mais comment les utiliser pour voir si j'ai bien à la fin du nom de fichier .bmp ?

    2/ des fonctions récursives de type VOID ca existe ? parce que pour atteindre la condition d'arrêt, il faut bien des return non ?

    Merci pour vos remarques.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par rafale001 Voir le message
    1/ j'ai pu voir que d'autre fonction str... renvoie des pointeurs, mais comment les utiliser pour voir si j'ai bien à la fin du nom de fichier .bmp ?
    Plusieurs solutions ont été données. Je t'invite à les essayer.
    2/ des fonctions récursives de type VOID ca existe ? parce que pour atteindre la condition d'arrêt, il faut bien des return non ?
    Je ne connais pas VOID. Le C définit void.

    L'instruction return peut avoir ou non un opérande.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Stabia Voir le message
    A part vous tout le monde avait complété.
    Pas le P.O., visiblement...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut
    si je pose la question c'est que ce n'est pas clair pour moi. Le coup des str...qui renvoie un pointeur c'est bien beau mais je ne sais pas comment m'en servir même après avoir lu des tutoriels et manuels...

  13. #13
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par rafale001 Voir le message
    si je pose la question c'est que ce n'est pas clair pour moi. Le coup des str...qui renvoie un pointeur c'est bien beau mais je ne sais pas comment m'en servir même après avoir lu des tutoriels et manuels...
    strcmp et strncmp ne renvoi pas de pointeur

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par rafale001 Voir le message
    si je pose la question c'est que ce n'est pas clair pour moi. Le coup des str...qui renvoie un pointeur c'est bien beau mais je ne sais pas comment m'en servir même après avoir lu des tutoriels et manuels...
    Montre au moins tes essais.

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Par défaut
    Pour une fois je suis d'accord avec Emmanuel D.

  16. #16
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il serait même préférable d'utiliser strcasecmp pour les problèmes de casse car tu pourrais avoir un fichier d'extension .bmp ou .BMP

    Edit : mince je crois qu'elle n'est pas standard mais uniquement BSD donc même pas POSIX pourtant dans le man elle apparaît dans string.h

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut
    J'ai essayé avec stncmp et c'est le même problème qu'avec la première fonction que j'ai utilisée.: dès lors que les lettres à comparer sont présentes dans la chaine, le test est validé. Il faudrait donc quelque chose qui puisse comparer la fin du nom de fichier, mais la fin "entière", en un seul bloc.

  18. #18
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Poste le code.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (4 == strspn (".bmp", argv[1])) // on vérifie que le nom de fichier est bien un *.bmp 
    		{
    			n = load(argv[1], img);
     
    			if (n == 1)
    			{
    				printf("image chargée correctement\n");
     
    			}
    le voila, mais je ne vois pas en quoi ca résoud le chmilblic.

    J'ai aussi essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strncmp (".bmp", argv[1], 3)
    Le soucis reste le même, ces fonctions regardent si les lettres sont présentes dans le nom de fichier, mais ne regarde pas la fin, et plus précisement le " .bmp"

  20. #20
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    strspn ce n'est pas ce qu'il faut

    strspn, strcspn - Rechercher un ensemble de caractères dans une chaîne.
    Ce qui veut dire qu'à partir du moment ou .bmp est présent dans la chaîne c'est foutu que se soit au début, au milieu ou à la fin...

Discussions similaires

  1. lecture de chaines de caractères
    Par berberat dans le forum Langage
    Réponses: 10
    Dernier message: 16/08/2008, 00h21
  2. Lecture de chaine avec fgetc ou getc
    Par muquet dans le forum C
    Réponses: 25
    Dernier message: 19/07/2007, 14h59
  3. lecture de fichier avec comparaison
    Par idsec dans le forum Web
    Réponses: 1
    Dernier message: 25/04/2007, 17h25
  4. [C#]Lecture de chaine dans un buffer
    Par despeludo dans le forum Framework .NET
    Réponses: 3
    Dernier message: 19/01/2007, 23h13
  5. lecture de chaine de caractères
    Par Halloula dans le forum C
    Réponses: 3
    Dernier message: 07/01/2007, 10h41

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