C ++ 'daki strtoll () işlevi, bir dizenin içeriğini belirtilen tabanın integral numarası olarak yorumlar ve değerini uzun 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 "201xz $" dizesi için Geçerli sayısal bölüm -> 201 Geçerli sayısal bölümden sonraki ilk karakter -> x
strtoll () prototipi (C ++ 11 standardından itibaren)
long long int strtoll (const char * str, char ** end, int base);
Strtoll () işlevi, dizge, karaktere bir işaretçi ve parametresi olarak bir tamsayı değeri alır - dizge içeriğini, verilen tabanın integral sayısı olarak yorumlar ve uzun uzun int değeri döndürür.
Bu işlev başlık dosyasında tanımlanmıştır.
strtoll () 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 karakter dizisine atanır. Bu parametre aynı zamanda bir boş gösterici olabilir ve bu durumda kullanılmaz.
- taban: İntegral değerinin tabanı. Taban için geçerli değerler kümesi (0, 2, 3,…, 35, 36).
strtoll () Dönüş değeri
Strtoll () işlevi şunu döndürür:
- uzun uzun int değeri (dizeden dönüştürülür).
- 0 geçerli bir dönüştürme yapılamazsa.
Örnek 1: strtoll () işlevi nasıl çalışır?
#include #include #include using namespace std; int main() ( int base = 10; char numberString() = "13.5ab_1x"; char *end; long long int number; number = strtoll(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "13"); cout << "String value = " << numberString << endl; number = strtoll(numberString, &end, base); cout << "Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )
Programı çalıştırdığınızda, çıktı:
Dize değeri = 13.5ab_1x Uzun uzun int değeri = 13 Bitiş Dize = .5ab_1x Dize değeri = 13 Uzun uzun int değeri = 13 Boş işaretçi
Strtoll () 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.
Örnek 2: farklı tabanlara sahip strtoll () işlevi
#include #include using namespace std; int main() ( char *end; cout << "23ajz" << " to Long Long Int with base-7 = " << strtoll("23ajz", &end, 7) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-20 = " << strtoll("23ajz", &end, 20) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-36 = " << strtoll("23ajz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )
Programı çalıştırdığınızda, çıktı:
23ajz - Long Long Int ile base-7 = 17 End String = ajz 23ajz - Long Long Int ile base-20 = 17419 End String = z 23ajz - Long Long Int ile 36 = 3512879 End String =
Strtoll () işlevi, birincil boşluk olmayan karakter bulunana kadar tüm öndeki boşluk karakterlerini yok sayar.
Genel olarak, strtoll () işlevi için geçerli bir tamsayı bağımsız değişkeni şu biçime sahiptir:
(boşluk) (- | +) (0 | 0x) (alfanümerik karakterler)
Daha sonra, bu karakterden başlayarak, geçerli bir tamsayı gösterimi oluşturan ve bunları uzun uzun 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: önde gelen boşluk ve geçersiz dönüştürme için strtoll () işlevi
#include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Long Int with base-11 = " << strtoll(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Long Int with base-2 = " << strtoll(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Long Int with base-10 = " << strtoll("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )
Programı çalıştırdığınızda, çıktı:
25axbz'den Long Long Int'e, base-11 = 307 End String = xbz 110bcd'den Long Long Int'e, base-2 = 6 End String = bcd ax110.97'den Long 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ı strtoll () işlevi
#include #include using namespace std; int main() ( char *end; /* octal base */ cout << "025x" << " to Long Long Int with base-0 = " << strtoll("025x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0xf1x" << " to Long Long Int with base-0 = " << strtoll("0xf1x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "15ab" << " to Long Long Int with base-0 = " << strtoll("15ab", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )
Programı çalıştırdığınızda, çıktı:
025x - Long Long Int ile base-0 = 21 End String = x 0xf1x ile Long Long Int ile base-0 = 241 End String = x 15ab ile Long Long Int ile base-0 = 15 End String = ab