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 :

Différence char et string


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut Différence char et string
    Bonjour,

    Voilà, je me demandais quelle était la différence exacte entre le type string et le type char. De plus, il pourquoi n'est-il pas nécessaire d'include <string> (#include <string>) pour utiliser des variables de ce type ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Le type char est le type des caractères (lettres, chiffres, et autres symboles), le type string est le type des chaînes de caractères.

    Le type char est prédéfini en C et donc en C++ aussi.

    David.
    --

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Le type char permet de stocker un caractère seul.
    Un tableau de char permet de créer une sorte de chaine de caractères.
    string apparait en C++ et permet de manipuler de vraies chaines de caractères.
    On retrouve l'opérateur += qui permet de concatener deux chaines, l'opérateur [] qui permet d'accéder à un nième caractère de la chaine, mais aussi des fonctions très utiles comme find, rfind, replace, compare, substr...

    Si tu veux une bonne référence, j'aime bien :
    http://www.cplusplus.com/reference/string/string/

    Par contre, il me semble que tu es obligé d'inclure <string> pour les utiliser, si tu ne le vois pas explicitement dans ta page, peut être est il en amont dans d'autres fichiers.

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 25
    Par défaut
    Merci !

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Par défaut
    Et il est important d'être conscient que "a" et 'a' sont deux valeurs bien différentes. La première est du type string, et représente une chaîne de un caractère. La seconde est une valeur du type char.

    David.
    --

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Salut,

    Le type char est un type primitif, au même titre que short, int, long float ou double, et il existe un mot clé qui est d'office reconnu par le compilateur pour introduire le fait que l'on utilise le type primitif en question...

    C'est à dire qu'il permet de représenter une valeur comprise parmis 256 possiblités.

    Le type std::string est une classe, ce qui revient à dire qu'il s'agit d'un type personnalisé, même s'il est "standard".

    Comme tout type personnalisé (finalement, il n'y a aucune différence entre la std::string et ta classe personnelle déclarée sous la forme de class TaClass ), il faut indiquer qu'elle existe en incluant le fichier dans lequel elle est déclarée, et il faut que le compilateur trouve l'implémentation des différentes méthodes...

    En C, la seule notion existante pour représenter les chaines de caractères est l'utilisation d'un tableau de caractères terminé par le caractère nul ('\0'), et pour en faciliter la gestion, il faut inclure un fichier qui déclare les fonctions utiles pour gérer ce tableau en tant que chaine de caractères (strcmp et autres)...

    En C++, on travaille en "orienté objet", et les fonctions qui permettent de gérer correctement les chaines de caractères sont donc disponible directement au sein de... la classe string...

    On trouve même une méthode qui permet de récupérer la chaine "C style" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string str="salut";
    char *tab=str.c_str();
    En plus, la gestion d'une chaine de caractères sous la forme "C style" provoque un tas de soucis (pour la comparaison, mais aussi quand on essaye de faire entrer plus de caractères que prévus dans le tableau...) au niveau de la gestion.

    Voilà quelles sont les grosses différences entre les deux, ainsi que les raisons qui font que l'on conseille régulièrement de préférer l'utilisation de la std::string partout où c'est possible
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    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
    Citation Envoyé par koala01 Voir le message
    On trouve même une méthode qui permet de récupérer la chaine "C style" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *tab=str.c_str();
    ne faites pas ça les enfants.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Comme on parle de std::string ici, j'ai également une petite question: "Quelle est la différence entre les méthodes data() et c_str()"?

    Voilà, j'ai jamais eu de problème que ce soit avec l'une ou avec l'autre, mais comme ces deux méthodes existent, je suppose qu'elles ne sont pas totalement identiques!

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    Citation Envoyé par koala01 Voir le message
    On trouve même une méthode qui permet de récupérer la chaine "C style" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *tab=str.c_str();
    ne faites pas ça les enfants.
    Non... Il est vrai que ce devrait être un const char*... mais bon, pour ce que ca change
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par kalash_jako Voir le message
    Comme on parle de std::string ici, j'ai également une petite question: "Quelle est la différence entre les méthodes data() et c_str()"?

    Voilà, j'ai jamais eu de problème que ce soit avec l'une ou avec l'autre, mais comme ces deux méthodes existent, je suppose qu'elles ne sont pas totalement identiques!
    La différence majeure consiste dans le fait que c_str() place d'office le fameux caractère nul ('\0') à la fin, alors que data() ne le fait pas obligatoirement

    [EDIT]la réponse se trouve dans la FAQ
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    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
    Citation Envoyé par koala01 Voir le message
    Non... Il est vrai que ce devrait être un const char*... mais bon, pour ce que ca change
    il faut s'en servir quand on a besoin, pour une fonction par exemple, d'utiliser une chaîne type C. Mais il vaut mieux éviter d'en sortir un pointeur et de s'amuser avec.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Par défaut
    Merci bien pour l'info koala01!

  13. #13
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    sois attentif au fait que je viens de modifier légèrement le message
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  14. #14
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    il faut s'en servir quand on a besoin, pour une fonction par exemple, d'utiliser une chaîne type C. Mais il vaut mieux éviter d'en sortir un pointeur et de s'amuser avec.
    Ah, ca, on est bien d'accord...

    J'aurais du préciser "en cas de besoin"... mais, désolé, les trois mots sont passés à la trappe
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. entier puis char puis string
    Par jadey dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2006, 20h15
  2. Conversion de char en string...
    Par Empty_body dans le forum Oracle
    Réponses: 2
    Dernier message: 20/03/2006, 14h34
  3. convertir un char * en string
    Par Seij dans le forum C++
    Réponses: 5
    Dernier message: 08/03/2006, 22h23
  4. Incompatibilités Char et String
    Par architecte dans le forum Langage
    Réponses: 5
    Dernier message: 05/12/2005, 00h35
  5. Différence entre un String et un string ?
    Par pepito62 dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/03/2005, 15h11

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