¿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.

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.


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;

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.