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.
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.
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.
--
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.
Merci !
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.
--
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" :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 std::string str="salut"; char *tab=str.c_str();
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
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!
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
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
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
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
Partager