Nasıl dize bir sayı dönüştürmek ve tersi C
Bu soru her hafta sorulan bu yana, FAQ bu kullanıcılara çok yardımcı olabilir.
Nasıl C bir dize bir tamsayı dönüştürmek için
nasıl C bir tamsayı bir dize dönüştürmek için
nasıl C bir dize için kayan noktalı sayıya dönüştürmek için
nasıl C kayan nokta bir dizi için bir dize dönüştürmek için
CEVAP
C 11 için güncelleme
C 11
standart olarak, dize sayısı ve tersi standart kütüphaneye yerleşik dönüştürme. Aşağıdaki tüm fonksiyonlar <string>
mevcut (paragraf 21.5 göre).
sayısal dize
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 dize alır ve bir dizi dönüştürmek için çalışacağız. Eğer geçerli bir sayı olabilir inşa, örneğin, çünkü orada hiçbir sayısal veri ya da sayı, Aralık türü için, bir istisna atılır (std::invalid_argument
std::out_of_range
).
Dönüştürme başarılı ve idx
değilse 0
, idx
kod çözme için kullanılan ilk karakterin dizinini içerir. Bu son karakter arkasında bir dizin olabilir.
Son olarak, integral tip bir üs basamak alfabesi kabul edilir 9, daha büyük (a=10
z=35
kadar) belirlemenize olanak sağlar. Burada floating-point numbers, signed integers unsigned integers ayrıştırılmış bu tam biçimlendirme hakkında daha fazla bilgi bulabilirsiniz.
Son olarak, her bir işlev için de ilk parametre olarak std::wstring
kabul eden bir aşırı yüklenme var.
dize 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);
Bu daha kolay, uygun bir sayısal türü geçirmek ve bir dize geri alırsın. Biçimlendirme seçenekleri için başka bir cevap burada anlatıldığı gibi C 03 stringsream seçeneği dönüp akış düzenleyicileri kullanmanız gerekir.
Yorumlarda da belirtildiği gibi bu fonksiyonlar geri muhtemelen en fazla hassas olmayan varsayılan mantis bir hassasiyet düşer. Eğer daha hassas bir uygulama için gerekli ise de en iyi başka bir dize biçimlendirme işlemleri için geri dönmek.
Ayrıca std::wstring
bir dönüş olacak bu to_wstring
, adlı benzer bir fonksiyon tanımlanmıştır.
nasıl dize ve bunun tersi bayt dizisi ...
Nasıl bir dize bir sayı (yüzen) olup o...
Nasıl bir dize dönüştürmek için yığın ...
Nasıl JavaScript bir Tamsayı bir Dize ...
Nasıl Ruby alt veya üst durumda bir di...