Strtoll () funkcija C ++ interpretē virknes saturu kā integrētu norādītās bāzes skaitli un atgriež tās vērtību kā garu garu int.
Šī funkcija arī norāda, ka rādītājs norāda uz pirmo rakstzīmi pēc pēdējās derīgās rakstzīmes, ja tādas ir, pretējā gadījumā rādītājs tiek iestatīts uz nulli.
10. bāzei un virknei "201xz $" Derīga skaitliskā daļa -> 201 Pirmā rakstzīme pēc derīgas skaitliskās daļas -> x
strtoll () prototips (pēc standarta C ++ 11)
garš garš int strtoll (const char * str, char ** gals, int bāze);
Funkcija strtoll () par savu parametru ņem virkni, rādītāju uz rakstzīmi un veselu skaitli - bāze, virknes saturu interpretē kā dotās bāzes neatņemamu skaitli un atgriež garu garu int vērtību.
Šī funkcija ir definēta galvenes failā.
strtoll () parametri
- str: virkne ar neatņemama skaitļa attēlojumu.
- end: Atsauce uz jau piešķirtu char * tipa objektu. Beigu vērtību funkcija nosaka nākamajai rakstzīmei str pēc pēdējās derīgās rakstzīmes. Šis parametrs var būt arī nulles rādītājs, tādā gadījumā tas netiek izmantots.
- bāze: integrālās vērtības bāze. Derīgo vērtību kopa bāzei ir (0, 2, 3,…, 35, 36).
strtoll () Atgriežamā vērtība
Funkcija strtoll () atgriež:
- gara gara int vērtība (kas tiek pārveidota no virknes).
- 0, ja nevarēja veikt derīgu konversiju.
1. piemērs: Kā darbojas strtoll () funkcija?
#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; )
Palaidot programmu, izeja būs:
Virknes vērtība = 13.5ab_1x garā garā int vērtība = 13 beigu virkne =, 5ab_1x virknes vērtība = 13 garā garā int vērtība = 13 nulles rādītājs
Funkcijas strtoll () derīga veselā skaitļa vērtība sastāv no:
- Papildu + vai - zīme.
- Oktāla pamatnes prefikss 0 (attiecas tikai tad, ja bāze = 8 vai 0).
- Heksadecimālās bāzes prefikss 0x vai 0X (attiecas tikai tad, ja bāze = 16 vai 0).
- Ciparu un / vai alfabētu secība (ja bāze ir lielāka par 10).
Parametra bāzes derīgās vērtības ir (0, 2, 3,…, 35, 36). Derīgo ciparu kopa pamatnei 2 ir (0, 1), pamatnei 3 ir (0, 1, 2) un tā tālāk.
Bāzēm, kas sākas no 11 līdz 36, derīgos ciparos ir alfabēti. Derīgo ciparu kopa pamatnei 11 ir (0, 1,…, 9, A, a), pamatnei 12 ir (0, 1,…, 9, A, a, B, b) un tā tālāk.
2. piemērs: funkcija strtoll () ar dažādām bāzēm
#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; )
Palaidot programmu, izeja būs:
23ajz līdz Long Long Int ar pamatu-7 = 17 gala virkne = ajz 23ajz līdz Long Long Int ar pamatu-20 = 17419 beigu virkne = z 23ajz līdz Long Long Int ar pamatu-36 = 3512879 beigu virkne =
Funkcija strtoll () ignorē visas vadošās atstarpes rakstzīmes, līdz tiek atrasts primārais raksturs, kas nav atstarpes.
Parasti derīgam vesela skaitļa argumentam strtoll () funkcijai ir šāda forma:
(atstarpe) (- | +) (0 | 0x) (burtciparu rakstzīmes)
Tad, sākot ar šo rakstzīmi, ir nepieciešams pēc iespējas vairāk rakstzīmju, kas veido derīgu vesela skaitļa attēlojumu un pārveido tos par garu garu int vērtību. Tas, kas paliek pāri no virknes pēc pēdējās derīgās rakstzīmes, tiek ignorēts un neietekmē rezultātu.
3. piemērs: funkcija strtoll (), lai vadītu atstarpi un nederīgu konversiju
#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; )
Palaidot programmu, izeja būs:
25axbz līdz Long Long Int ar bāzi-11 = 307 End String = xbz 110bcd līdz Long Long Int ar base-2 = 6 End String = bcd ax110.97 līdz Long Long Int ar bāzi-10 = 0 End String = ax110.97
Ja bāze ir 0, skaitliskā bāze tiek noteikta automātiski, aplūkojot virknes formātu. Ja prefikss ir 0, pamats ir oktāls (8). Ja prefikss ir 0x vai 0X, bāze ir heksadecimālā (16), pretējā gadījumā bāze ir decimāldaļa (10).
4. piemērs: funkcija strtoll () ar 0 bāzi
#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; )
Palaidot programmu, izeja būs:
025x līdz Long Long Int ar bāzes-0 = 21 beigu virkni = x 0xf1x līdz Long Long Int ar base-0 = 241 gala virkni = x 15ab līdz Long Long Int ar bāzes-0 = 15 end virkni = ab