C ++ strtod () - C ++ Standart Kitaplığı

C ++ 'daki strtod () işlevi, bir dizenin içeriğini bir kayan nokta sayısı olarak yorumlar ve değerini bir çift olarak döndürür.

Bu işlev, eğer varsa dizenin son geçerli karakterinden sonraki ilk karakteri göstermesi için bir gösterici ayarlar, aksi takdirde gösterici boş olarak ayarlanır.

10 tabanı ve "12abc" dizesi için

Geçerli sayısal kısım -> 12

Geçerli sayısal bölümden sonraki ilk karakter -> a

Başlık dosyasında tanımlanmıştır.

strtod () prototip

 çift ​​strtod (const char * str, char ** end);

Strtod () işlevi, parametresi olarak dizeyi ve karaktere bir gösterici alır, dizenin içeriğini bir floatsayı olarak yorumlar ve bir doubledeğer döndürür .

strtod () Parametreler

  • str : Bir kayan nokta sayısının temsiline sahip bir dize.
  • end : char * türünde önceden ayrılmış bir nesneye başvuru. End değeri, işlev tarafından son geçerli karakterden sonraki karakter dizisine atanır. Bu parametre aynı zamanda bir boş gösterici olabilir ve bu durumda kullanılmaz.

strtod () Dönüş değeri

Strtod () işlevi şunu döndürür:

  • çift ​​değer (dizeden dönüştürülen).
  • Geçerli dönüştürme yapılamazsa 0.0.

Dönüştürülen değer aralığın dışındaysa, bir aralık hatası oluşur ve pozitif veya negatif HUGE_VAL döndürülür.

Örnek 1: strtod () işlevi nasıl çalışır?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Programı çalıştırdığınızda, çıktı:

 Bitiş Dizesindeki Sayı = 12.44b 0xy Çiftli Sayı = 12.44 Dize = b 0xy

Örnek 2: Sonda karakterler olmayan strtod () işlevi

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Programı çalıştırdığınızda, çıktı:

 Bitiş Dizesindeki Sayı = 12.44b 0xy Çiftli Sayı = 12.44 Boş işaretçi

Strtod () işlevi için geçerli bir kayan nokta değeri, isteğe bağlı bir + veya - işaretini ve ardından aşağıdaki kümelerden birini içerir:

  • Ondalık kayan nokta değeri için :

    • İsteğe bağlı olarak bir ondalık nokta (.) İçeren bir ondalık sayı grubu (0-9).
      Örneğin: 13.170, -5.63, vb.

    • İsteğe bağlı üslü kısım (e veya E) ve ardından isteğe bağlı + veya - işareti ve boş olmayan ondalık basamak dizisi.
      Örneğin: 3.46101e + 007, 13.19e-013 vb.

  • Onaltılık kayan nokta değeri için :

    • 0x veya 0X ile başlayan ve ardından isteğe bağlı olarak bir ondalık nokta (.) İçeren, boş olmayan bir onaltılık rakam dizisi izleyen bir dize.
      Örneğin: 0xfa5, -0xb1f.24, vb.

    • İsteğe bağlı bir üs bölümü (p veya P) ve ardından isteğe bağlı bir + veya - işareti ve boş olmayan onaltılık rakam dizisi.
      Örneğin: 0x51c.23p5, -0x2a.3p-3, vb.

  • Sonsuzluk :

    • INF veya INFINITY (büyük / küçük harfe bakılmaksızın).
      Örneğin: -Inf, InfiNiTy, vb.

  • NaN (Sayı Değil) :

    • NAN veya NAN dizisi (büyük / küçük harf dikkate alınmaz) burada sıra, yalnızca alfasayısal karakterlerden veya alt çizgiden (_) oluşan bir karakter dizisidir. Sonuç sessiz bir NaN'dir.
      Örneğin: Nan, NaNab1, vb.

Örnek 3: strtod () üsler ve onaltılık sayılarla nasıl çalışır?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Programı çalıştırdığınızda, çıktı:

 Dize Sayısı = -44.01e-3Çiftte Son Dize Numarası = -0.04401 Bitiş Dize = Dizede Son Dize Numarası = 0xf1bc.51Hello Çiftli Sayı = 61884.3 Bitiş Dize = merhaba

Örnek 4: INFINITY ve NaN için Strtod Durumları

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Programı çalıştırdığınızda, çıktı:

 INFINITY - Double = inf End String = Infabc - Double = inf End String = abc NaN12a - Double = nan End String = 12a

Genel olarak, strtod () işlevi için geçerli bir kayan noktalı bağımsız değişken aşağıdaki biçime sahiptir:

(boşluk) (- | +) (rakamlar) (.digits) ((e | E) (- | +) rakamlar)

Strtod () işlevi, birincil boşluk olmayan karakter bulunana kadar tüm öndeki boşluk karakterlerini yok sayar.

Daha sonra, bu karakterden başlayarak, geçerli bir kayan nokta gösterimi oluşturan ve bunları bir kayan nokta değerine dönüştüren mümkün olduğunca çok karakter alır. Son geçerli karakterden sonra dizeden geriye kalan her ne ise, sonunda gösterilen nesnede saklanır.

Örnek 5: Önde boşluk bulunan strtod () işlevi

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Programı çalıştırdığınızda, çıktı:

 25,5 - Çift = 25,5 Bitiş Dizesi = abc11.20 - Çift = 0 Bitiş Dizesi = abc11.20

Ilginç makaleler...