Conversion C ++ de 1 caractère en chaîne? [fermé]


121

J'ai besoin de lancer seulement 1 charà string. La manière opposée est assez simple comme str[0].

Ce qui suit n'a pas fonctionné pour moi:

char c = 34;
string(1,c);
//this doesn't work, the string is always empty.

string s(c);
//also doesn't work.

boost::lexical_cast<string>((int)c);
//also doesn't work.

3
Impossible de reproduire: coliru.stacked-crooked.com
chris

10
Qu'est-ce qui vous fait penser que string(1, c)cela ne fonctionne pas? C'est la bonne façon de procéder.
templatetypedef

1
Quel compilateur utilisez-vous? Quel environnement. C'est peut-être un bogue avec votre compilateur.
Maurice Reeves

libc ++ abi.dylib: terminate appelé lançant une exception
weeo

3
@ weeo- L'erreur est probablement ailleurs dans votre programme. Veuillez publier un exemple autonome et reproductible qui démontre l'erro afin que nous puissions vous aider à comprendre ce qui ne va pas.
templatetypedef

Réponses:


184

Tous

std::string s(1, c); std::cout << s << std::endl;

et

std::cout << std::string(1, c) << std::endl;

et

std::string s; s.push_back(c); std::cout << s << std::endl;

travaillé pour moi.


4
Le moyen le plus court est: string s = "" + c;
doctorram

17
@doctorram NON! 1. les guillemets que vous utilisez ne sont pas C ++ non valides; 2. même si vous vouliez dire que s = "" + cc'est juste UB parce que cela ne signifie pas "concaténer la chaîne vide avec le caractère c", cela signifie "le pointeur vers une copie d'une chaîne vide, avancé par la valeur numérique de c(ce qui n'est définitivement pas ce que vous voulu); 3. si vous vouliez dire s = ""s + c, c'est encore plus long que s{1, c}... (et vous devriez écrire using std::literals;quelque part ...
Massa

11
Désolé, je voulais dire: string s = string () + 'a';
doctorram

1
Je ne peux pas supprimer le vote positif sur ce mauvais commentaire ...
Jake OPJ

10

J'ai honnêtement pensé que la méthode de casting fonctionnerait bien. Comme ce n'est pas le cas, vous pouvez essayer stringstream. Un exemple est ci-dessous:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
Je ne pense pas que le fait que ce constructeur de chaînes particulier ne fonctionne pas ait quoi que ce soit à voir avec le vrai problème.
chris

1
Probablement raison, mais je pensais offrir la réponse simple: P
Mallen

Cette solution fonctionne, mais l'utilisation de stringstream ( <sstream>) n'est pas nécessaire car elle inclura toute la bibliothèque dans le projet, ralentissant le processus de compilation. Essayez d'éviter d'inclure des dépendances inutiles à votre projet.
Cristian le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.