C ++ แปลงจาก 1 อักขระเป็นสตริง? [ปิด]


121

ฉันต้องร่าย 1 charถึงstringเท่านั้น str[0]ทางตรงข้ามสวยเรียบง่ายเช่น

สิ่งต่อไปนี้ใช้ไม่ได้สำหรับฉัน:

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
ทำซ้ำไม่ได้: coliru.stacked-crooked.com/…
chris

10
อะไรที่ทำให้คุณคิดstring(1, c)ว่าไม่ได้ผล? นั่นเป็นวิธีที่ถูกต้องในการทำเช่นนี้
templatetypedef

1
คุณใช้คอมไพเลอร์ตัวไหน สภาพแวดล้อมอะไร. บางทีนี่อาจเป็นปัญหากับคอมไพเลอร์ของคุณ
Maurice Reeves

libc ++ abi.dylib: ยุติเรียกว่าการโยนข้อยกเว้น
weeo

3
@ weeo- ข้อผิดพลาดอาจอยู่ที่อื่นในโปรแกรมของคุณ โปรดโพสต์ตัวอย่างที่มีอยู่ในตัวซึ่งสามารถทำซ้ำได้ซึ่งแสดงให้เห็นถึงข้อผิดพลาดเพื่อที่เราจะได้ช่วยคุณพิจารณาว่ามีอะไรผิดปกติ
templatetypedef

คำตอบ:


184

ทั้งหมดของ

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;

ทำงานให้ฉัน


4
วิธีที่สั้นที่สุดคือ string s =“” + c;
doctorram

17
@doctorram ไม่! 1. เครื่องหมายคำพูดที่คุณใช้เป็น C ++ ไม่ถูกต้อง 2. แม้ว่าคุณจะหมายถึงs = "" + cมันเป็นเพียง UB เพราะมันไม่ได้หมายความว่า "ต่อสตริงว่างกับอักขระc" แต่หมายถึง "ตัวชี้ไปยังสำเนาของสตริงว่างบางส่วนซึ่งอยู่ในขั้นสูงด้วยค่าตัวเลขของc(ซึ่งไม่ใช่สิ่งที่คุณแน่นอน ต้องการ); 3. ถ้าคุณหมายถึงs = ""s + cมันยังคงยาวกว่าs{1, c}... (และคุณจะต้องเขียนusing std::literals;ที่ไหนสักแห่ง ...
Massa

11
ขอโทษฉันหมายถึง: string s = string () + 'a';
doctorram

1
ฉันไม่สามารถลบการโหวตเพิ่มความคิดเห็นที่ไม่ถูกต้องได้ ...
Jake OPJ

10

ฉันคิดอย่างสุจริตใจว่าวิธีการหล่อจะใช้ได้ดี เนื่องจากคุณไม่สามารถลองใช้ stringstream ได้ ตัวอย่างอยู่ด้านล่าง:

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

2
ฉันไม่คิดว่าความจริงที่ว่าตัวสร้างสตริงเฉพาะนี้ไม่ทำงานเกี่ยวข้องกับปัญหาที่แท้จริง
chris

1
อาจจะถูก แต่คิดว่าฉันจะให้คำตอบง่ายๆ: P
Mallen

โซลูชันนี้ใช้งานได้ แต่<sstream>ไม่จำเป็นต้องใช้ stringstream ( ) เนื่องจากจะรวมไลบรารีทั้งหมดในโปรเจ็กต์ทำให้กระบวนการคอมไพล์ช้าลง พยายามหลีกเลี่ยงการรวมการอ้างอิงที่ไม่จำเป็นกับโครงการของคุณ
Cristian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.