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 :

Pointeur sur une string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre � l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Par d�faut Pointeur sur une string
    Bonjour,

    Je cherche sans trouver de r�ponse comment avoir un pointeur sur un objet string.
    Le but est d'utiliser les pointeurs (qui sont rapide) pour �diter une string.
    Le code ci-joint ne fonctionne pas car s->c_str() retourne un const char * et non un char *.
    Savez-vous comment je dois proc�der*?

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <string>
    using namespace std;
     
    void decalage_1(char *s)
    {
    	char *ptr;
     
    	ptr = s;
    	while (*ptr)
    	{
    		*ptr = *ptr + 1;
    		ptr++;
    	}
    }
     
    void decalage_2(string *s)
    {
    	char *ptr;
     
    	ptr = s->c_str(); // error: invalid conversion from ‘const char*’ to ‘char*’
    	while (*ptr)
    	{
    		*ptr = *ptr + 1;
    		ptr++;
    	}
    }
     
    int main(void)
    {
    	char *s1 = (char *)malloc(sizeof(char) * 255);
    	strcpy(s1, "foo");
    	decalage_1(s1);
    	printf("%s\n", s1); // gpp
    	free(s1);
     
    	// ------
     
    	string *s2;
    	s2 = new string("bar");
    	decalage_2(s2);
    	printf("%s\n", s2->c_str());
    	delete s2;
     
    	return 0;
    }
    Merci beaucoup de vos r�ponses.

  2. #2
    Mod�rateur
    Avatar de bruno_pages
    Homme Profil pro
    ing�nieur informaticien � la retraite
    Inscrit en
    Juin 2005
    Messages
    3 550
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 65
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : ing�nieur informaticien � la retraite
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 550
    Par d�faut
    si vous voulez modifier une string alors utilisez les op�rations d�finies sur string, dans votre cas :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    void decalage_2(string *s)
    {
    	s->erase(0, 1);
    }
    remarque compl�mentaire : string est faite pour �tre utilis�e directement, pas via un pointeur, et si voulez qu'elle soit modifi�e utilisez plut�t une r�f�rence, donc :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void decalage_2(string &s)
    {
    	s.erase(0, 1);
    }
     
    int main(void)
    {
    	...
    	string s2("bar");
     
    	decalage_2(s2);
    	...
    Bruno Pag�s, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non � jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    Ca ne sert � rien ce que tu veux faire. Un pointeur n'est pas rapide.

    Ton code a le d�faut de d�butant:

    - des pointeurs partout
    - un m�lange de C et de C++

    Un code C++ �a ressemble � �a:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    int main()
    {
        std::string s("bar");
     
        s.erase( 0, 1 );
    }
    En C++ tu ne passes pas ta vie � convertir d'un std::string � un char*.. On utilise directement les op�rations de strings.

    Pour les pointeurs, on en utilise le moins possible. Comme tu peux le voir sur le code d'exemple, il n'y a pas de new ni de delete � g�rer, et tout marche.

  4. #4
    jmv
    jmv est d�connect�
    Membre chevronn� Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par d�faut
    bonjour,

    Jette un coup d'oeil l� dessus.

    on y lit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    The returned C-style string should not be modified, as this could invalidate the pointer to the string, 
    or deleted, as the string has a limited lifetime and is owned by the class string.
    Si tu veux vraiment acc�der aux caract�res de ta chaine par des pointeurs, utilise plut�t les std::string::iterator, mais �a m'�tonnerait que tu fasse plus rapide que les m�thodes des la classe string.

    jm

  5. #5
    Membre exp�riment�
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par d�faut
    Bonjour,

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    std::string s("bar");
     
    s.erase( 0, 1 );
    ne va pas avoir l'effet escompt�, son but est d'incr�menter la valeur de chaque caract�res. (foo -> gpp)

    Tu peux faire
    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
     
    void f(char& c){
        c++;
    }
     
    int main(void)
    {
     
    	string s("bar");
     
    	for_each(s.begin(),s.end(),f);
     
    	cout << s << endl;//affiche "cbs"
     
    	return 0;//
    }

  6. #6
    Mod�rateur
    Avatar de bruno_pages
    Homme Profil pro
    ing�nieur informaticien � la retraite
    Inscrit en
    Juin 2005
    Messages
    3 550
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 65
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : ing�nieur informaticien � la retraite
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 550
    Par d�faut
    Citation Envoy� par atttchoum Voir le message
    son but est d'incr�menter la valeur de chaque caract�res. (foo -> gpp)
    effectivement, j'avais mal lu son code, je pensais qu'il faisait un d�calage pour retirer le 1er caract�re, au temps pour moi
    Bruno Pag�s, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non � jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

Discussions similaires

  1. pointeur sur une string ?
    Par awalter1 dans le forum G�n�ral Python
    R�ponses: 8
    Dernier message: 01/03/2011, 12h52
  2. Pointeur sur une chaine de caract�re string
    Par Lucier dans le forum C#
    R�ponses: 9
    Dernier message: 17/03/2010, 14h22
  3. R�ponses: 14
    Dernier message: 14/03/2005, 09h16
  4. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    R�ponses: 2
    Dernier message: 23/05/2004, 20h26
  5. [MFC] Probl�me pointeur sur une classe
    Par mick74 dans le forum MFC
    R�ponses: 7
    Dernier message: 14/04/2004, 14h17

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