Pembaruan untuk C ++ 11
Sebagai C++11
standar, konversi string-ke-angka dan sebaliknya dibangun ke dalam pustaka standar. Semua fungsi berikut ada di <string>
(sesuai paragraf 21.5).
string ke numerik
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);
Masing-masing mengambil string sebagai masukan dan akan mencoba mengubahnya menjadi angka. Jika tidak ada nomor yang valid dapat dibuat, misalnya karena tidak ada data numerik atau nomor di luar kisaran untuk tipe tersebut, pengecualian dilemparkan ( std::invalid_argument
atau std::out_of_range
).
Jika konversi berhasil dan idx
tidak 0
,idx
akan berisi indeks dari karakter pertama yang tidak digunakan untuk decoding. Ini bisa menjadi indeks di belakang karakter terakhir.
Akhirnya, tipe integral memungkinkan untuk menentukan basis, untuk angka yang lebih besar dari 9, alfabet diasumsikan ( a=10
sampai z=35
). Anda dapat menemukan informasi selengkapnya tentang pemformatan tepat yang dapat diuraikan di sini untuk bilangan floating-point , bilangan bulat bertanda dan bilangan bulat tak bertanda .
Terakhir, untuk setiap fungsi ada juga kelebihan beban yang menerima a std::wstring
sebagai parameter pertamanya.
numerik ke string
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);
Ini lebih mudah, Anda meneruskan tipe numerik yang sesuai dan Anda mendapatkan string kembali. Untuk opsi pemformatan, Anda harus kembali ke opsi aliran string C ++ 03 dan menggunakan manipulator aliran, seperti yang dijelaskan dalam jawaban lain di sini.
Seperti dicatat dalam komentar, fungsi-fungsi ini kembali ke presisi mantissa default yang mungkin bukan presisi maksimum. Jika lebih presisi diperlukan untuk aplikasi Anda, sebaiknya kembali ke prosedur pemformatan string lainnya.
Ada juga fungsi serupa yang didefinisikan yang diberi nama to_wstring
, ini akan mengembalikan a std::wstring
.