
FAQ C++Consultez toutes les FAQ
Nombre d'auteurs : 34, nombre de questions : 368, derni�re mise � jour : 14 novembre 2021 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums de http://www.developpez.com et de l'exp�rience personnelle des auteurs.
Je tiens � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur ou si vous souhaitez devenir r�dacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture.
- Comment convertir un char* en un string ?
- Comment convertir une string en char* ?
- Comment convertir un nombre en une string ?
- Comment convertir une string en un entier ?
- Comment convertir n'importe quel type d'objets en string ?
- Comment convertir une string en un objet de n'importe quel type ?
- Comment convertir une string en minuscules/majuscules ?
- [Pi�ge] Comment initialiser/affecter un nombre � une string ?
En utilisant tout simplement le constructeur ou l'op�rateur d'affectation de la classe std::string :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 | #include <string> // construction std::string str1 = "coucou"; std::string str2( "coucou" ); // affectation std::string str3; str3 = "coucou"; str3.assign( "coucou" ); |
M�me en C++ on est parfois oblig� d'utiliser des char *. Pour obtenir une cha�ne de caract�res C non modifiable (const char *), il suffit d'appeler la fonction c_str() de string.
Code c++ : | S�lectionner tout |
1 2 3 | string file_name = "fichier.txt"; // ouverture du fichier ifstream file( file_name.c_str() ); // Avant C++11, le constructeur de std::ifstream n'accepte pas de string |


Pour obtenir une cha�ne de type C modifiable, il faut cr�er une copie de la string.
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <string> #include <cstring> #include <iostream> int main() { std::string str = "une chaîne de caractères"; // créer le buffer pour copier la chaîne size_t size = str.size() + 1; // + 1 pour le caractère '\0' de fin char * buffer = new char[ size ]; // copier la chaîne strncpy( buffer, str.c_str(), size ); // utiliser le buffer std::cout << buffer << '\n'; // "une chaîne de caractères" // libérer la mémoire delete [] buffer; } |
L'utilisation d'un objet ostringstream permet de convertir un entier en une string :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | #include <sstream> int main() { // cr�er un flux de sortie std::ostringstream oss; // �crire un nombre dans le flux oss << 10; // r�cup�rer une cha�ne de caract�res std::string result = oss.str(); } |

Pour �viter les erreurs, lire aussi

En utilisant istringstream :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 | #include <sstream> int main() { // cr�er un flux � partir de la cha�ne � convertir std::istringstream iss( "10" ); // convertir en un int int nombre; iss >> nombre; // nombre vaut 10 } |

L'utilisation de ostringstream permet de convertir en une string n'importe quel objet pour lequel l'op�rateur ostream::operator <<() a �t� d�fini. Il est donc possible de cr�er une fonction g�n�rique de conversion de n'importe quel objet en une string gr�ce � l'utilisation des templates :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <sstream> template<typename T> std::string to_string( const T & Value ) { // utiliser un flux de sortie pour cr�er la cha�ne std::ostringstream oss; // �crire la valeur dans le flux oss << Value; // renvoyer une string return oss.str(); } int main() { std::string num = to_string( 10 ); } |
L'utilisation de istringstream permet de convertir une string en n'importe quel type pour lequel l'op�rateur istream::operator >>() a �t� d�fini. Il est donc possible de cr�er une fonction g�n�rique de conversion d'une string en un autre type gr�ce � l'utilisation des templates :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <sstream> template<typename T> bool from_string( const std::string & Str, T & Dest ) { // cr�er un flux � partir de la cha�ne donn�e std::istringstream iss( Str ); // tenter la conversion vers Dest return iss >> Dest != 0; } int main() { int dix; from_string( "10", dix ); } |
Pour la conversion d'une string en une cha�ne de caract�res modifiable, consultez

Pour des d�tails sur le principe de la conversion avec l'op�rateur >>, consultez

D'une mani�re g�n�rale, le probl�me de la conversion d'une cha�ne majuscule en minuscule (ou inversement) est bien plus complexe qu'il n'y para�t. C'est un sujet qui d�borde du cadre de cette FAQ, mais voici un rapide aper�u des probl�mes soulev�s :
- les caract�res diacritiques posent probl�me. Le changement de casse n�cessite la conservation des accents, mais il arrive qu'on �crive des mots en majuscule sans leurs accents. Par exemple, si "f�te" doit �tre transcrit en � F�TE �, parfois on souhaite obtenir � FETE �. Si l'absence d'accentuation pour les majuscules est plus facilement accept�e, c'est rarement le cas pour les minuscules : � FETE � doit �tre converti en � f�te �. Cela implique une conversion d�pendante du contexte (orthographe). Et que dire des phrases ambigu�s que seul le contexte s�mantique peut d�partager : � UN INTERNE TUE A L'ASILE PSYCHIATRIQUE � : est-ce un interne ou un intern� ? A-t-il tu� ou a-t-il �t� tu� ?
- certains caract�res ne doivent pas �tre convertis en minuscule, comme celui du d�but d'une phrase ou encore d'un nom propre. Par exemple, la phrase � MERCI M. DUPONT � devrait normalement �tre convertie en � Merci M. Dupont �. Bien �videment, c'est une t�che extr�mement complexe � r�aliser de mani�re automatis�e ;
- dans certaines langues, un caract�re majuscule ne correspond pas forc�ment � un seul caract�re minuscule, et inversement. Ainsi, en Allemand par exemple, la combinaison de majuscules SS peut correspondre soit � la combinaison de minuscule ss, soit � l'unique lettre minuscule � et quelques fois, les deux sont m�me permis (Masse/Ma�e). Ajoutez � cela que les Suisses et les Autrichiens ont des r�gles diff�rentes, et l'on comprend mieux la complexit� du probl�me.
Si l'on se recentre sur le C++, la solution classique (qui est aussi celle g�n�ralement attendue) est d'effectuer une conversion in-place (� en place �, c'est-�-dire directement sur la cha�ne, caract�re par caract�re) au moyen de toupper (pour mettre en majuscule) ou tolower (pour mettre en minuscule). std::transform est traditionnellement utilis� pour appliquer une de ces fonctions � chaque caract�re d'une cha�ne.
Pour convertir une string en minuscule ou en majuscule, il faut appliquer la fonction std::tolower / std::toupper � chaque caract�re, ce que l'on peut r�aliser par exemple gr�ce � std::transform.
Cependant, std::tolower et std::toupper attendent un param�tre compris dans l'intervalle [0...UCHAR_MAX] (ou EOF), et un char peut potentiellement �tre n�gatif (les caract�res accentu�s, par exemple). Utiliser directement ces fonctions provoquerait donc un comportement ind�fini par la norme, c'est pourquoi il faut ajouter un traitement interm�diaire afin de convertir les caract�res dans le bon type (unsigned char ici).
Code c++ : | S�lectionner tout |
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 | #include <cctype> // pour tolower et toupper #include <string> // pour string #include <iostream> // pour cout #include <algorithm> // pour transform struct my_tolower { char operator()(char c) const { return std::tolower(static_cast<unsigned char>(c)); } }; struct my_toupper { char operator()(char c) const { return std::toupper(static_cast<unsigned char>(c)); } }; int main() { std::string s("ABCDEF"); std::transform(s.begin(), s.end(), s.begin(), my_tolower()); std::cout << s; // affiche "abcdef" std::transform(s.begin(), s.end(), s.begin(), my_toupper()); std::cout << s; // affiche "ABCDEF" return 0; } |

Ceux qui recherchent des explications pouss�es et une solution compl�tement fonctionnelle pour la conversion minuscules/majuscules peuvent consulter cette discussion sur fr.comp.lang.c++.
Pour plus d'efficacit�, on pourra utiliser les biblioth�ques ICU (International Components for Unicode) ou Boost.Locale.
Le code suivant compile mais ne donne pas le r�sultat attendu :
Code c++ : | S�lectionner tout |
string s = 0;
Il n'est pas possible d'initialiser directement une string avec un nombre. Il faut convertir celui-ci en cha�ne de caract�res puis utiliser ce r�sultat. La question

Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.