¿C ++ convierte de 1 carácter a cadena? [cerrado]

121

Necesito lanzar solo 1 charto string. La forma opuesta es bastante simple como str[0].

Lo siguiente no funcionó para mí:

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
fuente
3
No se puede reproducir: coliru.stacked-crooked.com/…
chris
10
¿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;

trabajó para mi.

Massa
fuente
4
La forma más corta es: string s = “” + c;
doctorram
17
@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;
Mallen
fuente
2
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.
Cristian