2013-06-19 11 views
68

ja naprawdę nie znaleźliśmy żadnej odpowiedzi tak blisko ...C++ przekonwertować z 1 znaku na ciąg?

przeciwny sposób jest dość prosty jak str [0]

Ale muszę oddać tylko 1 char na ciąg ...

tak:

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 return null 
+3

nie można odtworzyć: http://coliru.stacked-crooked.com/view?id=921396d51d6d0324bef7cc64062decc3-1dfa45f65786f4a26064bc85b3de325a – chris

+7

Co sprawia, że ​​myślisz 'string (1, c)' nie działa? To jest właściwy sposób, aby to zrobić. – templatetypedef

+0

Jakiego kompilatora używasz? Jakie środowisko. Może to błąd w twoim kompilatorze. –

Odpowiedz

115

Wszystkie

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

i

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

i

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

pracował dla mnie.

+0

Najkrótsza droga to: string s = "" + c; – doctorram

+0

@doctorram NIE! 1. używane cudzysłowy są nieprawidłowe C++; 2. nawet jeśli miałeś na myśli 's =" "+ c' to po prostu UB, ponieważ nie oznacza to" łączenia pustego ciągu znaków z znakiem 'c'", to znaczy "wskaźnika do jakiejś kopii pustego łańcucha, wysuniętej przez wartość numeryczna 'c' (która ostatecznie nie jest tym, czego potrzebujesz); 3. jeśli chodziło o' s = "" s + c', to jest dłuższe niż 's {1, c}' ... (a ty musiałby napisać 'using std :: literals;' somewhere ... – Massa

+1

Przepraszam, miałem na myśli: string s = string() + 'a'; – doctorram

6

szczerze myślałem, że metoda odlewania będzie działać prawidłowo. Ponieważ nie możesz spróbować stringstream. Przykładem jest poniżej:

#include <sstream> 
#include <string> 
stringstream ss; 
string target; 
char mychar='a'; 
ss << mychar; 
ss >> target; 
+2

Nie sądzę, aby fakt, że ten konkretny konstruktor łańcuchów nie działa, nie ma nic wspólnego z rzeczywistym problemem. – chris

+1

Prawdopodobnie tak, ale myślałem, że zaoferuję łatwą odpowiedź: P – Mallen

Powiązane problemy