SORU
13 Mart 2011, Pazar


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
18 HAZİRAN 2012, PAZARTESİ


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Carlos Delgado

    Carlos Delga

    21 HAZİRAN 2011
  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • Matt Steffanina

    Matt Steffan

    1 EYLÜL 2011