Saya pikir ini akan sangat sederhana tetapi menghadirkan beberapa kesulitan. Jika saya punya
std::string name = "John";
int age = 21;
Bagaimana cara menggabungkannya untuk mendapatkan satu string "John21"
?
c++
int
concatenation
stdstring
Obediah Stane
sumber
sumber
Boost::lexical_cast
,std::stringstream
,std::strstream
(yang sudah ditinggalkan), dansprintf
vssnprintf
.Jawaban:
Dalam urutan abjad:
#include <string>
)#include <sstream>
(dari standar C ++)sumber
String(number)
.Di C ++ 11, Anda dapat menggunakan
std::to_string
, misalnya:sumber
Jika Anda memiliki Peningkatan, Anda dapat mengonversi bilangan bulat menjadi string menggunakan
boost::lexical_cast<std::string>(age)
.Cara lain adalah dengan menggunakan stringstreams:
Pendekatan ketiga adalah menggunakan
sprintf
atausnprintf
dari perpustakaan C.Poster lain disarankan untuk digunakan
itoa
. Ini BUKAN fungsi standar, jadi kode Anda tidak akan portabel jika Anda menggunakannya. Ada kompiler yang tidak mendukungnya.sumber
sprintf
jawabansnprintf
.sumber
Tanpa malu-malu dicuri dari http://www.research.att.com/~bs/bs_faq2.html .
sumber
s
adalah variabel tumpukan, memoris
akan bebas setelah dipanggilitos
.s
harus mengalokasikan dari tumpukan, danfree
setelah menggunakan, kan?Ini cara termudah:
sumber
Jika Anda memiliki C ++ 11, Anda dapat menggunakan
std::to_string
.Contoh:
Keluaran:
sumber
name += std::to_string(static_cast<long long>(age));
di VC ++ 2010 seperti yang Anda lihat di sininame += std::to_string(age + 0LL);
bukan?Sepertinya saya bahwa jawaban yang paling sederhana adalah menggunakan
sprintf
fungsi:sumber
sumber
Maka penggunaan Anda akan terlihat seperti ini
Dicari Google [dan diuji: p]
sumber
Masalah ini dapat dilakukan dengan banyak cara. Saya akan menunjukkannya dalam dua cara:
Konversi angka menjadi string menggunakan
to_string(i)
.Menggunakan aliran string.
Kode:
sumber
Jika Anda ingin menggunakan
+
untuk penggabungan apa pun yang memiliki operator keluaran, Anda dapat memberikan versi templat darioperator+
:Kemudian Anda dapat menulis rangkaian Anda dengan mudah:
Keluaran:
Ini bukan cara yang paling efisien, tetapi Anda tidak perlu cara yang paling efisien kecuali Anda melakukan banyak penggabungan di dalam satu lingkaran.
sumber
std::string
, jadi tidak akan menjadi kandidat dalam ekspresi di mana string tidak dapat dikonversi menjadi tipe yang diperlukan. Misalnya, inioperator+
tidak memenuhi syarat untuk digunakan+
dalamint x = 5 + 7;
. Semua hal dipertimbangkan, saya tidak akan mendefinisikan operator seperti ini tanpa alasan yang sangat menarik, tetapi tujuan saya adalah untuk menawarkan jawaban yang berbeda dari yang lain.Jika Anda menggunakan MFC, Anda dapat menggunakan CString
Managed C ++ juga memiliki formatter string .
sumber
Std :: ostringstream adalah metode yang bagus, tetapi terkadang trik tambahan ini berguna mengubah format menjadi satu-liner:
Sekarang Anda dapat memformat string seperti ini:
sumber
Karena pertanyaan terkait Qt ditutup untuk pertanyaan ini, berikut ini cara melakukannya menggunakan Qt:
Variabel string sekarang memiliki nilai someIntVariable di tempat% 1 dan nilai someOtherIntVariable di akhir.
sumber
Ada lebih banyak opsi yang dapat digunakan untuk menggabungkan bilangan bulat (atau objek numerik lainnya) dengan string. Ini adalah Boost.Format
dan Karma dari Boost.Spirit (v2)
Boost. Spirit Karma mengklaim sebagai salah satu opsi tercepat untuk konversi integer ke string .
sumber
Jawaban Umum: itoa ()
Ini buruk.
itoa
tidak standar, seperti yang ditunjukkan di sini .sumber
Anda dapat menggabungkan int ke string dengan menggunakan trik sederhana yang diberikan di bawah ini, tetapi perhatikan bahwa ini hanya berfungsi ketika integer adalah dari satu digit. Jika tidak, tambahkan angka integer demi digit ke string itu.
sumber
Berikut ini adalah implementasi cara menambahkan int ke string menggunakan aspek parsing dan format dari pustaka IOStreams.
sumber
sumber
Ada fungsi yang saya tulis, yang mengambil nomor int sebagai parameter, dan mengubahnya menjadi string literal. Fungsi ini tergantung pada fungsi lain yang mengubah satu digit ke karakternya:
sumber
Dengan perpustakaan {fmt} :
Subset perpustakaan diusulkan untuk standardisasi sebagai P0645 Pemformatan Teks dan, jika diterima, di atas akan menjadi:
Penafian : Saya penulis perpustakaan {fmt}.
sumber
Sebagai satu liner:
name += std::to_string(age);
sumber