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.

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.


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;

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.