Bir int'i dizgeye dönüştürmenin en kısa yolu, tercihen satır içi yetenekli olan nedir? Stl ve boost kullanarak cevaplar memnuniyetle karşılanacaktır.
to_string
beğenebilirsinizstd::string s = std::to_string(42)
Bir int'i dizgeye dönüştürmenin en kısa yolu, tercihen satır içi yetenekli olan nedir? Stl ve boost kullanarak cevaplar memnuniyetle karşılanacaktır.
to_string
beğenebilirsinizstd::string s = std::to_string(42)
Yanıtlar:
C ++ 11'de std :: to_string kullanabilirsiniz
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint)
itibaren boost/lexical_cast.hpp
İş std :: ostream desteği olan her şey içindir, ancak örneğin, itoa
Hatta stringstream veya scanf'den daha hızlı görünüyor:
lexical_cast
getiriyor gibi , ama
Bunu yapmanın iyi bilinen yolu akış operatörünü kullanmaktır:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
Tabii ki bir şablon işlevi kullanarak herhangi bir tür için genelleştirebilirsiniz ^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>
.
std::
;)
std::to_string
C ++ 11'den kullanamıyorsanız , cppreference.com'da tanımlandığı gibi yazabilirsiniz:
std::string to_string( int value )
İşaretli ondalık tamsayıyı,std::sprintf(buf, "%d", value)
yeterince büyük buf için üretilecek içerikle aynı dizeye dönüştürür .
uygulama
#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;
}
Bununla daha fazlasını yapabilirsiniz. Sadece "%g"
float veya double dize "%x"
dönüştürmek için kullanın , int onaltılık temsile dönüştürmek için kullanın , vb.
Standart olmayan işlev, ancak en yaygın derleyicilere uygulanır:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
Güncelleme
C ++ 11 birkaç std::to_string
aşırı yük getirdi (varsayılan olarak taban-10'a dikkat edin).
ostream
Sıra eserler, bir ikili, sekizli veya onaltılık biçimden farklı bir şey olarak numara-string kaydetmeniz gerekir dek (örn baz-32).
itoa()
ya stricmp()
cevap olarak verilmiştir şey .
sprintf
OP'nin amacını da başarabilirim (yine de ortak taban numaralarından başka bir şey gerekiyorsa esneklikten muzdarip olsa da).
Aşağıdaki makro, tek kullanımlık kadar kompakt değil ostringstream
veyaboost::lexical_cast
.
Ancak kodunuzda art arda dizeye dönüştürmeye ihtiyacınız varsa, bu makro kullanımda her zaman doğrudan dize akışlarını veya açık dökümleri kullanmaktan daha zariftir.
Ayrıca çok yönlüdür, çünkü desteklenen her şeyi dönüştürüroperator<<()
arada bile .
Tanım:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
Açıklama:
std::dec
İsminin gizli yapmak için bir yan etkisi içermeyen bir yoldur ostringstream
jenerik içine ostream
Sooperator<<()
işlev arama her türlü düzgün çalışır. (Aksi takdirde, ilk argüman bir işaretçi türüyse sorun yaşarsınız.)
dynamic_cast
Tip geri döner ostringstream
Arayabileceğin böylecestr()
.
kullanın:
#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() }
? (Have test edilmedi, ama yanlış ve neden gitmek ne merak mı?
int
(ilk örneğim ). Ama olmadan ostream
içinde derleyici tarafından görülebilir main
(bu şablon işlevi içinde gizlidir gibi), o kadar bakmaya çalışacağım operator<<()
için const char []
benim ikinci örnekteki - croak hangi. OP sadece bir istedi istedi int
, ama bu daha genel makro o kadar yararlı (ve aslında oldukça yaygın) buraya dahil olacağını düşündüm.
Aşağıdakileri ekledikten sonra dönüştürmek int
için bu işlevi kullanabilirsiniz :std::string
<sstream>
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}
Projenize itoa uygulamasını ekleyebilirsiniz.
İşte itoa std :: string ile çalışmak üzere değiştirildi: http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
Burada, int'i dizeye dönüştürmenin başka bir kolay yolu
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
daha fazla yöntem için bu bağlantıyı ziyaret edebilirsiniz https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
Varsayalım integer = 0123456789101112
. Şimdi, bu tam sayı stringstream
sınıf tarafından bir dizeye dönüştürülebilir .
İşte C ++ kodu:
#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;
}