Câu hỏi C ++ chuyển đổi từ 1 char thành chuỗi? [đã đóng]


Tôi thực sự không tìm thấy câu trả lời nào gần ...

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

Nhưng tôi chỉ cần cast 1 char để string ...

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

76
2018-06-19 21:22


gốc


Không thể tái sản xuất: coliru.stacked-crooked.com/… - chris
Điều gì khiến bạn nghĩ string(1, c) không hoạt động? Đó là cách đúng để làm điều này. - templatetypedef
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. - Maurice Reeves
libc ++ abi.dylib: chấm dứt được gọi là ném một ngoại lệ - weeo
@ weeo- Lỗi này có thể là một nơi khác trong chương trình của bạn. Vui lòng đăng một ví dụ có thể tái tạo, khép kín để minh họa cho bản dựng này để chúng tôi có thể giúp bạn tìm ra điều gì sai. - templatetypedef


Các câu trả lời:


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 cho tôi.


126
2018-06-19 21:32



Cách ngắn nhất là: string s = “” + c; - doctorram
@doctorram KHÔNG! 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ó ý s = "" + c nó chỉ là UB 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ỏ đến một số bản sao của một chuỗi rỗng, được nâng cao bởi giá trị số của c (chắc chắn không phải những gì bạn muốn); 3. nếu bạn có nghĩa là s = ""s + c, nó dài hơn s{1, c}... (và bạn sẽ phải viết using std::literals; một vài nơi... - Massa
Xin lỗi, ý tôi là: string s = string () + 'a'; - doctorram


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ụ dưới đây:

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

6
2018-06-19 21:28



Tôi không nghĩ rằng thực tế rằng nhà xây dựng chuỗi cụ thể này không làm việc có bất cứ điều gì để làm với vấn đề thực sự. - chris
Có lẽ đúng, nhưng nghĩ tôi sẽ đưa ra câu trả lời dễ dàng: P - Mallen