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

C ++ 'daki strtol () işlevi, bir dizenin içeriğini belirtilen tabanın integral numarası olarak yorumlar ve değerini bir uzun int olarak döndürür.

C ++ 'daki strtol () işlevi, bir dizenin içeriğini belirtilen tabanın integral numarası olarak yorumlar ve değerini bir uzun int 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" dizisi için: Geçerli sayısal bölüm -> 12 Geçerli sayısal bölümden sonraki ilk karakter -> a

strtol () prototipi (C ++ 11 standardından itibaren)

 uzun int strtol (const char * str, char ** end, int base);

Strtol () işlevi, dizeyi, karaktere bir işaretçi ve parametresi olarak bir tamsayı değerini alır, dizenin içeriğini verilen tabanın tamsayı olarak yorumlar ve bir uzun int değeri döndürür.

Bu işlev başlık dosyasında tanımlanmıştır.

strtol () Parametreler

  • str: Bir integral 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 karaktere dizilir. Bu parametre aynı zamanda bir boş gösterici olabilir, bu durumda kullanılmaz.
  • base:İntegral değerin tabanı. Taban için geçerli değerler kümesi (0, 2, 3,…, 35, 36).

strtol () Dönüş değeri

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

  • bir uzun int değeri (dizeden dönüştürülür).
  • 0 geçerli bir dönüştürme yapılamazsa.

Örnek 1: strtol () C ++ 'da nasıl çalışır?

 #include #include using namespace std; int main() ( int base = 10; char str() = "27ab_1x"; char *end; long int num; num = strtol(str, &end, base); cout << "Number in String = " << str << endl; cout << "Number in Long Int = " << num << endl; cout << "End String = " << end << endl << endl; // the pointer to invalid characters can be null strcpy(str, "27"); cout << "Number in String = " << str << endl; num = strtol(str, &end, base); cout << "Number in Long Int = " << num << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; ) 

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

 String'deki Sayı = 27ab_1x Long Int'deki sayı = 27 End String = ab_1x String'deki sayı = 27 Long Int'deki sayı = 27 Null işaretçi

Strtol () işlevi için geçerli bir tamsayı değeri şunlardan oluşur:

  • İsteğe bağlı bir + veya - işareti.
  • Sekizlik taban için 0 öneki (yalnızca taban = 8 veya 0 olduğunda geçerlidir).
  • Onaltılık taban için 0x veya 0X öneki (yalnızca taban = 16 veya 0 olduğunda geçerlidir).
  • Bir dizi rakam ve / veya alfabe (taban 10'dan büyükse).

Parametre tabanı için geçerli değerler (0, 2, 3,…, 35, 36). 2 tabanı için (0, 1), 3 tabanı için (0, 1, 2) vb. 11'den 36'ya başlayan bazlar için, geçerli rakamlar alfabeleri içerir. 11 tabanı için geçerli rakamlar kümesi (0, 1,…, 9, A, a), taban 12 için (0, 1,…, 9, A, a, B, b) vb.

Not: Bir taban için geçerli bir karakterin, aşağıdaki örnekte olduğu gibi başka bir taban için geçersiz dizge ile sonuçlanabileceğini unutmamak önemlidir.

Örnek 2: farklı tabanlar ile strtol () işlevi

 #include #include #include using namespace std; int main() ( char *end; cout << "128bz" << " to Long Int with base-5 = " << strtol("128bxz", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-12 = " << strtol("128bxz", &end, 12) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-36 = " << strtol("128bxz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 128bz'den Long Int'e, base-5 = 7 End String = 8bxz 128bz'den Long Int'e, base-12 = 2123 End String = xz 128bz'den Long Int'e, base-36 = 64214135 ile Long Int = 

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

Genel olarak, strtol () işlevi için geçerli bir tamsayı bağımsız değişkeni aşağıdaki biçime sahiptir:

 (boşluk) (- | +) (0 | 0x) (alfanümerik karakterler)

Ardından, bu karakterden başlayarak, geçerli bir tamsayı gösterimi oluşturan ve bunları uzun bir int değerine dönüştüren mümkün olduğunca çok karakter alır. Son geçerli karakterden sonra dizeden geriye kalanlar yok sayılır ve sonuç üzerinde hiçbir etkisi yoktur.

Örnek 3: Baştaki boşluk ve geçersiz dönüştürme için strtol () işlevi

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Int with base-11 = " << strtol(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Int with base-2 = " << strtol(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Int with base-10 = " << strtol("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

 25axbz'den Long Int'e, base-11 = 307 ile End String = xbz 110bcd'den Long Int'e, base-2 = 6 End String = bcd ax110.97'den Long Int'e, base-10 = 0 End String = ax110.97 

Taban 0 ise, sayısal taban dizenin biçimine bakılarak otomatik olarak belirlenir. Ön ek 0 ise, taban sekizliktir (8). Önek 0x veya 0X ise, taban onaltılık (16), aksi takdirde taban ondalıktır (10).

Örnek 4: 0 tabanlı strtol () işlevi

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "0128ai" << " to Long Int with base-0 = " << strtol("0128ai", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x15axzz" << " to Long Int with base-0 = " << strtol("0x15axzz", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "23dfl" << " to Long Int with base-0 = " << strtol("23dfl", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

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

0128ai'den Long Int'e, base-0 = 10 End String = 8ai 0x15axzz'den Long Int'e, base-0 = 346 End String = xzz 23dfl'den Long Int'e, base-0 = 23 End String = dfl 

Ilginç makaleler...