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.
Version imprimable
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:
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 ;)
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
Merci bien pour l'info koala01!
sois attentif au fait que je viens de modifier l�g�rement le message ;)