C ++ przekonwertować z 1 znaku na ciąg? [Zamknięte]

121

Muszę rzucić tylko 1 chardo string. Odwrotny sposób jest dość prosty str[0].

Poniższe nie działają dla mnie:

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
źródło
3
Nie można odtworzyć: coliru.stacked-crooked.com/…
chris
10
Co sprawia, że ​​myślisz, że string(1, c)nie działa? To jest właściwy sposób, aby to zrobić.
templatetypedef
1
Którego kompilatora używasz? Jakie środowisko. Może to błąd twojego kompilatora.
Maurice Reeves
libc ++ abi.dylib: terminate o nazwie rzucanie wyjątku
weeo
3
@ weeo- Błąd prawdopodobnie znajduje się w innym miejscu twojego programu. Prześlij samodzielny, odtwarzalny przykład, który demonstruje błąd, abyśmy mogli pomóc Ci dowiedzieć się, co jest nie tak.
templatetypedef

Odpowiedzi:

184

Wszystkie z

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

i

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

i

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

pracował dla mnie.

Massa
źródło
4
Najkrótszy sposób to: string s = „” + c;
doctorram,
17
@doctorram NO! 1. cudzysłowy, których używasz, są nieprawidłowe w C ++; 2. nawet jeśli miałeś na myśli, s = "" + cże to po prostu UB, ponieważ nie oznacza to "konkatenacji pustego ciągu ze znakiem c", oznacza to "wskaźnik do jakiejś kopii pustego ciągu, rozszerzony o wartość liczbową c(która definitywnie nie jest tym, czym chciał); 3. jakbyś miał na myśli s = ""s + c, to jeszcze dłużej niż s{1, c}... (a musiałbyś using std::literals;gdzieś pisać ...
Massa
11
Przepraszam, miałem na myśli: string s = string () + 'a';
doctorram
1
Nie mogę usunąć głosu za złym komentarzem ...
Jake OPJ,
10

Szczerze myślałem, że metoda odlewania zadziała. Ponieważ tak nie jest, możesz spróbować stringstream. Przykład poniżej:

#include <sstream>
#include <string>
std::stringstream ss;
std::string target;
char mychar = 'a';
ss << mychar;
ss >> target;
Mallen
źródło
2
Nie sądzę, że fakt, że ten konkretny konstruktor ciągów nie działa, ma coś wspólnego z prawdziwym problemem.
chris
1
Prawdopodobnie tak, ale pomyślałem, że podam prostą odpowiedź: P
Mallen
To rozwiązanie działa, jednak użycie metody stringstream ( <sstream>) nie jest konieczne, ponieważ włączy całą bibliotekę do projektu, spowalniając proces kompilacji. Staraj się unikać niepotrzebnych zależności w swoim projekcie.
Cristian