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

SL & STL C++ Discussion :

Parcours d'une std::string lettre à lettre


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut Parcours d'une std::string lettre à lettre
    Bonjour

    Je n'arrive pas à parcourir une std::string lettre à lettre avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // ligne est une std::string passer en paramètre
     
    for (u8 i = 1; i < ligne.length(); i++)
    {
     
    char ch[1];
    memcpy(ch, ligne.c_str() ,i);
    // pour tester car je sais que le premier char est "["
    		if (!strcmp(ch, "["))
    		{
    			int ui = 0;
    		}
    }
    Or ch est égal lors de la première itération à "[IIIIII ....".
    Comment faire sachant que ch[0] est bon ?
    Merci pour vos réponses

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 900
    Points : 1 918
    Points
    1 918
    Par défaut
    C'est assez confus, qu'est-ce-que tu cherches à faire exactement ? Tu peux accéder aux caractères d'une std::string via l'opérateur [], pourquoi ne pas s'en servir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int i = 0; i < ligne.length(); ++i)
    {
        char c = ligne[i];
        // Traitement sur c
    }

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut
    Oui mais comment utiliser la fonction de comparaison après ?

  4. #4
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par MABB
    Oui mais comment utiliser la fonction de comparaison après ?
    En faisant un simple if:N'oublie pas qu'un caractère reste une valeur numérique, sur le quel tu peux faire des opérations et des comparaisons basiques.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut
    Merci désolé pour mes questions simplistes

  6. #6
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par MABB Voir le message
    Merci désolé pour mes questions simplistes
    Pas de désolé, le forum est là pour ça .
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut
    Cela me procoque les erreurs :

    error C2040: '=='*: les niveaux d'indirection de 'int' et de 'const char [2]' sont différents
    error C2446: '!='*: pas de conversion de 'const char *' en 'int'
    Manque-t-il un include de quelque chose ?

  8. #8
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 900
    Points : 1 918
    Points
    1 918
    Par défaut
    Peux-tu poster le code qui pose problème ? J'ai l'impression que tu mélanges les char (caractères simple) et les char* et char[] (pointeurs de caractères).

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0; i < ligne.length(); ++i)
    {
        char c = ligne[i];
    	if (c == "[")  // ici erreurs 
    	{
    		int uioo = 0;
    	}
    }

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Kai,
    Citation Envoyé par MABB Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0; i < ligne.length(); ++i)
    {
        char c = ligne[i];
    	if (c == "[")  // ici erreurs 
    	{
    		int uioo = 0;
    	}
    }
    Les " marquent une chaîne de caractères.

    Un caractère seul se marque '['.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Les caractères s'entourent de ', les chaînes de caractères de ".

    Je rajouterais à cela que je ne comprends pas du tout pourquoi tu y vas à grands coups de memcpy & compagnie !

    Une std::string est un conteneur de caractères.

    Tu peux accéder à chaque caractère par mastring[i].
    Tu n'as ainsi qu'à comparer mastring[i] avec '['. S'ils sont différents, tu fais quelque chose, sinon, tu fais autre chose.

  12. #12
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Alp Voir le message
    Je rajouterais à cela que je ne comprends pas du tout pourquoi tu y vas à grands coups de memcpy & compagnie !
    Son code a évolué depuis son premier post .
    Je rajouterais juste qu'effectivement, pour manipuler ta chaîne de caractère, la classe std::string contient tous les outils dont tu as besoin.
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En général, parcourir caractère par caractère c'est souvent une mauvaise conception.
    Soit tu tiens à faire une recherche (utiliser find), soit tu tiens à analyser la chaîne de manière plus complexe (utiliser un parser).
    Boost ftw

  14. #14
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 120
    Points : 49
    Points
    49
    Par défaut
    Le problème est résolu. Il ne me rester plus qu'a utilisé les apostrophes au lieu des guillemets.

    Merci à vous

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

Discussions similaires

  1. taille d'une std::string
    Par ZeNoob dans le forum SL & STL
    Réponses: 3
    Dernier message: 19/05/2012, 11h06
  2. Réponses: 2
    Dernier message: 14/06/2010, 15h21
  3. manipulation d'une std::string
    Par titou35 dans le forum Débuter
    Réponses: 20
    Dernier message: 22/06/2009, 16h35
  4. Convertir une std::string de utf8 vers cp850
    Par dj.motte dans le forum SL & STL
    Réponses: 7
    Dernier message: 30/10/2008, 22h15
  5. [FAQ]Comment convertir une std::string en AnsiString ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/11/2006, 18h08

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