C ++ converte da 1 carattere a una stringa? [chiuso]


121

Devo lanciare solo 1 chara string. Il modo opposto è piuttosto semplice come str[0].

Quanto segue non ha funzionato per me:

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
Impossibile riprodurre: coliru.stacked-crooked.com/…
chris

10
Cosa ti fa pensare string(1, c)che non funzioni? È il modo giusto per farlo.
templatetypedef

1
Quale compilatore stai usando? Quale ambiente. Forse questo è un bug con il tuo compilatore.
Maurice Reeves

libc ++ abi.dylib: terminate chiamato
generando

3
@ weeo- L'errore è probabilmente da qualche altra parte nel tuo programma. Pubblica un esempio autonomo e riproducibile che dimostri l'erro in modo che possiamo aiutarti a capire cosa non va.
templatetypedef

Risposte:


184

Tutto di

std::string s(1, c); std::cout << s << std::endl;

e

std::cout << std::string(1, c) << std::endl;

e

std::string s; s.push_back(c); std::cout << s << std::endl;

ha funzionato per me.


4
Il modo più breve è: string s = “” + c;
doctorram

17
@doctorram NO! 1. le virgolette che stai usando non sono C ++ non valide; 2. anche se intendevi s = "" + cche è solo UB perché non significa "concatena la stringa vuota con il carattere c", significa "il puntatore a qualche copia di una stringa vuota, avanzata dal valore numerico di c(che non è definitivamente quello che voluto); 3. se volevi dire s = ""s + c, è ancora più lungo di s{1, c}... (e dovresti scrivere using std::literals;da qualche parte ...
Massa

11
Scusa, volevo dire: string s = string () + 'a';
doctorram

1
Non posso rimuovere il voto positivo su quel commento sbagliato ...
Jake OPJ

10

Onestamente pensavo che il metodo di fusione avrebbe funzionato bene. Dato che non è così, puoi provare stringstream. Di seguito un esempio:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;

2
Non credo che il fatto che questo particolare costruttore di stringhe non funzioni abbia nulla a che fare con il vero problema.
chris

1
Probabilmente ha ragione, ma ho pensato di offrire la risposta semplice: P
Mallen

Questa soluzione funziona, tuttavia l'utilizzo di stringstream ( <sstream>) non è necessario poiché includerà l'intera libreria nel progetto, rallentando il processo di compilazione. Cerca di evitare di includere dipendenze non necessarie al tuo progetto.
Cristian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.