Apa cara terpendek, lebih disukai inline-mampu, untuk mengkonversi int ke string? Jawaban menggunakan stl dan boost akan disambut.
to_stringlikestd::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_stringlikestd::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_castdibawanya, 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_stringdari 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_stringkelebihan (perhatikan bahwa standarnya adalah base-10).
ostreamkerjanya 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 .
sprintfjuga dapat mencapai tujuan OP (meskipun masih kekurangan fleksibilitas jika diperlukan hal-hal selain angka dasar umum).
Makro berikut tidak sepadat satu penggunaan ostringstreamatauboost::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::decadalah cara bebas efek samping untuk menjadikan anonim ostringstreammenjadi generik ostreamsehingga operator<<()fungsi pencarian berfungsi dengan benar untuk semua jenis. (Anda mendapat masalah sebaliknya jika argumen pertama adalah tipe pointer.)
The dynamic_castmengembalikan tipe kembali ke ostringstreamsehingga 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 ostreamterlihat 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;
}