C ++ 11 güncellemesi
İtibarıyla C++11
, standart, dize kadar-numarası dönüştürülmesi veya bunun tam tersi, standart kütüphaneye inşa edilir. Aşağıdaki tüm işlevler <string>
(21.5 paragrafına göre) içinde mevcuttur.
sayısal dizge
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Bunların her biri girdi olarak bir dizge alır ve onu bir sayıya dönüştürmeye çalışır. Örneğin sayısal veri olmadığından veya sayı tür için aralık dışı olduğundan geçerli bir sayı oluşturulamazsa, bir istisna atılır ( std::invalid_argument
veya std::out_of_range
).
Dönüştürme başarılıysa ve başarılı idx
değilse 0
, idx
kod çözme için kullanılmayan ilk karakterin dizinini içerecektir. Bu, son karakterin arkasındaki bir dizin olabilir.
Son olarak, integral türleri bir taban belirtmeye izin verir, 9'dan büyük basamaklar için alfabenin ( a=10
kadar z=35
) olduğu varsayılır . Kayan nokta sayıları , işaretli tam sayılar ve işaretsiz tam sayılar için burada ayrıştırılabilecek tam biçimlendirme hakkında daha fazla bilgi bulabilirsiniz .
Son olarak, her işlev için, a'yı std::wstring
birinci parametre olarak kabul eden bir aşırı yük vardır .
dizeye sayısal
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Bunlar daha basittir, uygun sayısal türü iletirsiniz ve bir dizi geri alırsınız. Biçimlendirme seçenekleri için, burada başka bir cevapta açıklandığı gibi, C ++ 03 dizgi akışı seçeneğine geri dönmeli ve akış manipülatörlerini kullanmalısınız.
Yorumlarda belirtildiği gibi, bu işlevler, büyük olasılıkla maksimum kesinlik olmayan varsayılan bir mantis hassasiyetine geri döner. Uygulamanız için daha fazla hassasiyet gerekiyorsa, diğer dize biçimlendirme prosedürlerine geri dönmeniz en iyisidir.
Ayrıca adlandırılmış tanımlanmış benzer işlevler de vardır to_wstring
, bunlar bir std::wstring
.