Apa cara terpendek, lebih disukai inline-mampu, untuk mengkonversi int ke string? Jawaban menggunakan stl dan boost akan disambut.
to_string
likestd::string s = std::to_string(42)
Apa cara terpendek, lebih disukai inline-mampu, untuk mengkonversi int ke string? Jawaban menggunakan stl dan boost akan disambut.
to_string
likestd::string s = std::to_string(42)
Jawaban:
Anda dapat menggunakan std :: to_string di C ++ 11
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
dari boost/lexical_cast.hpp
Bekerja untuk semuanya dengan dukungan std :: ostream, tetapi tidak secepat, misalnya, itoa
Bahkan tampaknya lebih cepat daripada stringstream atau scanf:
lexical_cast
dibawanya, tetapi merasa Boost cukup banyak kerja keras untuk tugas semacam ini ...
Cara paling terkenal untuk melakukannya adalah menggunakan operator aliran:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
Tentu saja Anda dapat menggeneralisasikannya untuk semua jenis menggunakan fungsi templat ^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>
.
std::
;)
Jika Anda tidak dapat menggunakan std::to_string
dari C ++ 11, Anda dapat menulisnya seperti yang didefinisikan di cppreference.com:
std::string to_string( int value )
Mengonversi bilangan bulat desimal yang ditandatangani ke string dengan konten yang sama seperti apa yangstd::sprintf(buf, "%d", value)
akan menghasilkan untuk buf yang cukup besar.
Penerapan
#include <cstdio>
#include <string>
#include <cassert>
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
assert( length >= 0 );
char* buf = new char[length + 1];
snprintf( buf, length + 1, "%d", x );
std::string str( buf );
delete[] buf;
return str;
}
Anda bisa berbuat lebih banyak dengannya. Cukup gunakan "%g"
untuk mengkonversi float atau double ke string, gunakan "%x"
untuk mengubah int ke representasi hex, dan sebagainya.
Fungsi non-standar, tetapi diterapkan pada kompiler paling umum:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
Memperbarui
C ++ 11 memperkenalkan beberapa std::to_string
kelebihan (perhatikan bahwa standarnya adalah base-10).
ostream
kerjanya juga, sampai Anda perlu menyimpan string angka sebagai sesuatu selain format biner, oktal, atau hex (mis. Base-32).
itoa()
atau stricmp()
diberikan sebagai jawaban untuk apa pun .
sprintf
juga dapat mencapai tujuan OP (meskipun masih kekurangan fleksibilitas jika diperlukan hal-hal selain angka dasar umum).
Makro berikut tidak sepadat satu penggunaan ostringstream
atauboost::lexical_cast
.
Tetapi jika Anda perlu konversi-ke-string berulang kali dalam kode Anda, makro ini lebih elegan digunakan daripada langsung menangani stringstreams atau casting eksplisit setiap waktu.
Ini juga sangat serbaguna, karena mengkonversi segala sesuatu yang didukung oleh operator<<()
, bahkan dalam kombinasi.
Definisi:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
Penjelasan:
Ini std::dec
adalah cara bebas efek samping untuk menjadikan anonim ostringstream
menjadi generik ostream
sehingga operator<<()
fungsi pencarian berfungsi dengan benar untuk semua jenis. (Anda mendapat masalah sebaliknya jika argumen pertama adalah tipe pointer.)
The dynamic_cast
mengembalikan tipe kembali ke ostringstream
sehingga Anda dapat memanggil str()
di atasnya.
Menggunakan:
#include <string>
int main()
{
int i = 42;
std::string s1 = SSTR( i );
int x = 23;
std::string s2 = SSTR( "i: " << i << ", x: " << x );
return 0;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }
lakukan? (Belum diuji, tetapi saya ingin tahu apa yang salah dan mengapa?
int
(contoh pertama saya). Tapi tanpa ostream
terlihat oleh compiler di main
(seperti yang tersembunyi dalam fungsi template), ia akan mencoba untuk mencari operator<<()
untuk const char []
di contoh kedua saya - yang akan parau. Saya tahu OP hanya meminta int
, tetapi makro yang lebih umum ini sangat berguna (dan sebenarnya cukup luas) sehingga saya pikir saya akan memasukkannya di sini.
Anda mungkin menyertakan implementasi itoa di proyek Anda.
Ini itoa dimodifikasi untuk bekerja dengan std :: string: http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
Di sini, adalah cara mudah lain untuk mengonversi int ke string
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
Anda dapat mengunjungi tautan ini untuk metode lainnya https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
Misalkan saya punya integer = 0123456789101112
. Sekarang, integer ini dapat dikonversi menjadi string olehstringstream
kelas.
Berikut adalah kode dalam C ++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string s;
stringstream st;
for(i=0;i<=12;i++)
{
st<<i;
}
s=st.str();
cout<<s<<endl;
return 0;
}