2013-06-19 42 views
68

tôi thực sự không tìm thấy bất kỳ câu trả lời mà đóng ...C++ chuyển đổi từ 1 char thành chuỗi?

theo cách ngược lại là khá đơn giản như str [0]

Nhưng tôi cần phải cast chỉ có 1 char để chuỗi ...

như thế này:

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

Không thể sao chép: http://coliru.stacked-crooked.com/view?id=921396d51d6d0324bef7cc64062decc3-1dfa45f65786f4a26064bc85b3de325a – chris

+7

Điều gì khiến bạn nghĩ 'chuỗi (1, c)' không hoạt động? Đó là cách đúng để làm điều này. – templatetypedef

+0

Bạn đang sử dụng trình biên dịch nào? Môi trường nào. Có lẽ đây là một lỗi với trình biên dịch của bạn. –

Trả lời

115

Tất cả

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

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

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

làm việc cho tôi.

+0

Cách ngắn nhất là: string s = “” + c; – doctorram

+0

@doctorram NO! 1. dấu ngoặc kép bạn đang sử dụng không hợp lệ C++; 2. ngay cả khi bạn có nghĩa là 's =" "+ c' nó chỉ UB bởi vì nó không có nghĩa là" nối chuỗi rỗng với ký tự 'c'", nó có nghĩa là "con trỏ tới một số bản sao của chuỗi rỗng, được nâng cao bởi giá trị số của 'c' (chắc chắn không phải là thứ bạn muốn), 3. nếu bạn có nghĩa là' s = "" s + c', nó vẫn dài hơn 's {1, c}' ... (và bạn sẽ phải viết 'using std :: literals;' ở đâu đó ... – Massa

+1

Xin lỗi, ý tôi là: string s = string() + 'a'; – doctorram

6

Tôi thành thật nghĩ rằng phương pháp đúc sẽ hoạt động tốt. Vì nó không bạn có thể thử stringstream. Một ví dụ là dưới đây:

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

Tôi không nghĩ thực tế rằng hàm tạo chuỗi cụ thể này không hoạt động có liên quan gì đến vấn đề thực. – chris

+1

Có lẽ đúng, nhưng tôi nghĩ rằng tôi sẽ đưa ra câu trả lời dễ dàng: P – Mallen

Các vấn đề liên quan