C ++ chuyển đổi từ 1 ký tự sang chuỗi ký tự? [đóng cửa]


121

Tôi chỉ cần truyền 1 charđến string. Cách làm ngược lại khá đơn giản như str[0].

Những điều sau đây không hiệu quả với tôi:

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
Không thể tái tạo: coliru.stacked-crooked.com/...
chris

10
Điều gì khiến bạn nghĩ là string(1, c)không hiệu quả? Đó là cách đúng đắn để làm điều này.
templatetypedef

1
Bạn đang sử dụng trình biên dịch nào? Môi trường gì. Có thể đâ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ệ
December

3
@ palm- Có thể lỗi nằm ở đâu đó khác trong chương trình của bạn. Vui lòng đăng một ví dụ khép kín, có thể tái tạo để chứng minh lỗi sai để chúng tôi có thể giúp bạn tìm ra lỗi sai.
templatetypedef

Câu trả lời:


184

Tất cả

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

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

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

đã làm cho tôi.


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

17
@doctorram KHÔNG! 1. dấu ngoặc kép bạn đang sử dụng là C ++ không hợp lệ; 2. ngay cả khi bạn muốn nói s = "" + cnó 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 chuỗi rỗng, được nâng cao bởi giá trị số của c(mà chắc chắn không phải là những gì bạn muốn); 3. nếu bạn có nghĩa là s = ""s + c, nó stilll dài hơn s{1, c}... (và bạn sẽ phải ghi using std::literals;ở đâu đó ...
Massa

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

1
Tôi có thể xóa bỏ phiếu ủng hộ về nhận xét sai đó ...
Jake OPJ

10

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

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

2
Tôi không nghĩ rằng thực tế là phương thức tạo chuỗi cụ thể này không hoạt động có liên quan gì đến vấn đề thực sự.
chris

1
Có lẽ đúng, nhưng nghĩ rằng tôi muốn cung cấp câu trả lời dễ dàng: P
Mallen

Giải pháp này hoạt động, tuy nhiên việc sử dụng stringstream ( <sstream>) là không cần thiết vì nó sẽ bao gồm toàn bộ thư viện trong dự án, làm chậm quá trình biên dịch. Cố gắng tránh bao gồm các phụ thuộc không cần thiết vào dự án của bạn.
Cristian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.