C ++ mengkonversi dari 1 karakter ke string? [Tutup]

121

Saya hanya perlu mentransmisikan 1 charhingga string. Cara sebaliknya cukup sederhana sepertistr[0] .

Hal berikut tidak berhasil untuk saya:

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.
weeo
sumber
3
Tidak dapat mereproduksi: coliru.stacked-crooked.com/…
chris
10
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;

bekerja untuk saya.

Massa
sumber
4
Cara terpendek adalah: string s = “” + c;
doctorram
17
@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;
Mallen
sumber
2
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.
Cristian