¿Qué te hace pensar string(1, c)que no funciona? Esa es la forma correcta de hacer esto.
templatetypedef
1
¿Qué compilador estás usando? Qué ambiente. Quizás esto sea un error con su compilador.
Maurice Reeves
libc ++ abi.dylib: termina la llamada lanzando una excepción
weeo
3
@ weeo- El error probablemente se encuentre en otra parte de su programa. Publique un ejemplo autocontenido y reproducible que demuestre el error para que podamos ayudarlo a descubrir qué está mal.
templatetypedef
Respuestas:
184
Todo
std::string s(1, c); std::cout << s << std::endl;
y
std::cout << std::string(1, c)<< std::endl;
y
std::string s; s.push_back(c); std::cout << s << std::endl;
@doctorram ¡NO! 1. las comillas que está utilizando no son válidas para C ++; 2. incluso si quisiste decir s = "" + cque es solo UB porque no significa "concatenar la cadena vacía con el carácter c", significa "el puntero a alguna copia de una cadena vacía, avanzado por el valor numérico de c(que definitivamente no es lo que quería); 3. si quisiste decir s = ""s + c, todavía es más largo que s{1, c}... (y tendrías que escribir en using std::literals;algún lugar ...
Massa
11
Lo siento, quise decir: string s = string () + 'a';
doctorram
1
No puedo eliminar el voto a favor de ese comentario incorrecto ...
Jake OPJ
10
Honestamente, pensé que el método de casting funcionaría bien. Como no es así, puedes probar con stringstream. A continuación se muestra un ejemplo:
#include<sstream>#include<string>
std::stringstream ss;
std::string target;char mychar ='a';
ss << mychar;
ss >> target;
No creo que el hecho de que este constructor de cadenas en particular no funcione tenga nada que ver con el problema real.
chris
1
Probablemente tenga razón, pero pensé en ofrecer la respuesta fácil: P
Mallen
Esta solución funciona, sin embargo, <sstream>no es necesario usar stringstream ( ) ya que incluirá toda la biblioteca en el proyecto, lo que ralentiza el proceso de compilación. Trate de evitar incluir dependencias innecesarias en su proyecto.
string(1, c)
que no funciona? Esa es la forma correcta de hacer esto.Respuestas:
Todo
y
y
trabajó para mi.
fuente
s = "" + c
que es solo UB porque no significa "concatenar la cadena vacía con el carácterc
", significa "el puntero a alguna copia de una cadena vacía, avanzado por el valor numérico dec
(que definitivamente no es lo que quería); 3. si quisiste decirs = ""s + c
, todavía es más largo ques{1, c}
... (y tendrías que escribir enusing std::literals;
algún lugar ...Honestamente, pensé que el método de casting funcionaría bien. Como no es así, puedes probar con stringstream. A continuación se muestra un ejemplo:
fuente
<sstream>
no es necesario usar stringstream ( ) ya que incluirá toda la biblioteca en el proyecto, lo que ralentiza el proceso de compilación. Trate de evitar incluir dependencias innecesarias en su proyecto.