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.
weeo
la source
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.

Massa
la source
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;
Mallen
la source
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