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 :

Recherche du dernier caractere d'une chaine


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut Recherche du dernier caractere d'une chaine
    Bonjour à tous,

    Voila je ne comprend pas trop comment fonctionne ce bout de code:

    char*str="Vive l'OpenGL"
    char*EndOfStr;

    EndOfStr = str + strlen(str);

    while (str < EndOfStr)
    {
    ...
    }

    "EndOfStr = str + strlen(str);" Cette ligne semble permettre de trouver le dernier caractere de str. Cela marche car EndOfStr est utilisée dans la boucle while mais comment un chaine peut elle être concaténée à un int ?
    Lorsque je regarde EndOfStr au debbug il vaut tjs (il me semble) "".
    Comment 2 chaines peuvent-elles être ainsi comparées dans la boucle while?

    merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ce n'est pas de la manipulation de chaînes, mais simplement de l'arithmétique de pointeurs. Lorsque tu ajoutes un entier N à un pointeur, cela va décaler celui-ci de N éléments. Donc pointeur sur ta chaîne + taille de la chaîne = pointeur sur le dernier élément de ta chaîne.

    Ensuite la conditions du while ne compare pas les chaînes, mais seulement les valeurs des pointeurs, et signifie "tant que le caractère actuel n'est pas le dernier".



    PS : ça devrait être des const char* et non des char*
    PPS : pas la peine de chercher un pointeur sur la fin de la chaîne, il suffit de s'arrêter lorsque l'on tombe sur le caractère nul ('\0') ; c'est ce que fait d'ailleurs strlen

  3. #3
    Membre confirmé
    Homme Profil pro
    testeur logiciel
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : testeur logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    Ok compris
    Merci pour ta réponse

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut
    est-ce que c'est plus efficace d'utiliser un tableau de char si on peut utiliser carrément la classe string ?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par hitomidoaxbv
    est-ce que c'est plus efficace d'utiliser un tableau de char si on peut utiliser carrément la classe string ?
    Si c'était le cas la classe string ne servirait à rien.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Je me permet de m'immiscer pour dire que le bout de code ci-dessus a une utilité.
    Le caractère 0 est bien la marque de fin de chaine, mais l'octet 0 non...
    S'arrêter au premier octet 0 rencontré risque de ne pas marcher...

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Octets: 89 243 0 99 88 0
            -- ----- -- -- -
    Chars:  0   1    2  3  4
    strlen, si je souviens bien, utilise la locale par défaut pour strlen(), et rien ne dit que celle-ci utilise bien un code-page single-byte (chaque caractère encodé sur un seul octet).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    const char* str;
    const char* eos = str + strlen(str);
    Avec ce code, eos pointent toujours sur le dernier caractère de la chaine quelque soit la locale.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2011, 15h49
  2. [WD14] Recherche d'un caractere dans une chaine
    Par nanox dans le forum WinDev
    Réponses: 2
    Dernier message: 28/07/2010, 13h25
  3. Réponses: 5
    Dernier message: 29/05/2009, 12h28
  4. PhpMyAdmin recherche de caractere dans une chaine text
    Par dalsim59 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 18/06/2008, 11h15
  5. [langage] Retirer le premier caractère d'une chaine ?
    Par kwisach dans le forum Langage
    Réponses: 5
    Dernier message: 24/04/2003, 11h05

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