Apa yang membuat Anda berpikir string(1, c)tidak berhasil? Itu cara yang benar untuk melakukan ini.
templatetypedef
1
Kompiler mana yang Anda gunakan? Lingkungan apa. Mungkin ini bug pada kompiler Anda.
Maurice Reeves
libc ++ abi.dylib: terminate disebut melempar pengecualian
weeo
3
@ weeo- Kesalahannya mungkin ada di tempat lain dalam program Anda. Silakan posting contoh mandiri yang dapat direproduksi yang menunjukkan kesalahan sehingga kami dapat membantu Anda mencari tahu apa yang salah.
templatetypedef
Jawaban:
184
Semua
std::string s(1, c); std::cout << s << std::endl;
dan
std::cout << std::string(1, c)<< std::endl;
dan
std::string s; s.push_back(c); std::cout << s << std::endl;
@doctorram TIDAK! 1. tanda kutip yang Anda gunakan tidak valid C ++; 2. bahkan jika yang Anda maksud s = "" + citu hanya UB karena itu tidak berarti "menggabungkan string kosong dengan karakter c", itu berarti "penunjuk ke beberapa salinan dari string kosong, dimajukan oleh nilai numerik c(yang secara definitif bukan yang Anda diinginkan); 3. jika Anda bermaksud s = ""s + c, itu masih lebih lama dari s{1, c}... (dan Anda harus menulis di using std::literals;suatu tempat ...
Massa
11
Maaf, maksud saya: string s = string () + 'a';
doctorram
1
Saya tidak dapat menghapus suara positif untuk komentar yang salah itu ...
Jake OPJ
10
Sejujurnya saya berpikir bahwa metode casting akan bekerja dengan baik. Karena tidak, Anda dapat mencoba stringstream. Contohnya di bawah ini:
#include<sstream>#include<string>
std::stringstream ss;
std::string target;char mychar ='a';
ss << mychar;
ss >> target;
Saya tidak berpikir fakta bahwa konstruktor string khusus ini tidak berfungsi ada hubungannya dengan masalah sebenarnya.
chris
1
Mungkin benar, tapi saya pikir saya akan menawarkan jawaban yang mudah: P
Mallen
Solusi ini berfungsi, namun menggunakan stringstream ( <sstream>) tidak diperlukan karena akan menyertakan seluruh pustaka dalam proyek, memperlambat proses kompilasi. Cobalah untuk menghindari menyertakan dependensi yang tidak perlu ke proyek Anda.
string(1, c)
tidak berhasil? Itu cara yang benar untuk melakukan ini.Jawaban:
Semua
dan
dan
bekerja untuk saya.
sumber
s = "" + c
itu hanya UB karena itu tidak berarti "menggabungkan string kosong dengan karakterc
", itu berarti "penunjuk ke beberapa salinan dari string kosong, dimajukan oleh nilai numerikc
(yang secara definitif bukan yang Anda diinginkan); 3. jika Anda bermaksuds = ""s + c
, itu masih lebih lama daris{1, c}
... (dan Anda harus menulis diusing std::literals;
suatu tempat ...Sejujurnya saya berpikir bahwa metode casting akan bekerja dengan baik. Karena tidak, Anda dapat mencoba stringstream. Contohnya di bawah ini:
sumber
<sstream>
) tidak diperlukan karena akan menyertakan seluruh pustaka dalam proyek, memperlambat proses kompilasi. Cobalah untuk menghindari menyertakan dependensi yang tidak perlu ke proyek Anda.