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;
@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;
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.
string(1, c)
cela ne fonctionne pas? C'est la bonne façon de procéder.Réponses:
Tous
et
et
travaillé pour moi.
la source
s = "" + c
c'est juste UB parce que cela ne signifie pas "concaténer la chaîne vide avec le caractèrec
", cela signifie "le pointeur vers une copie d'une chaîne vide, avancé par la valeur numérique dec
(ce qui n'est définitivement pas ce que vous voulu); 3. si vous vouliez dires = ""s + c
, c'est encore plus long ques{1, c}
... (et vous devriez écrireusing std::literals;
quelque part ...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:
la source
<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.