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.