C ++ strtoll () - Standardna knjižnica C ++

Funkcija strtoll () v jeziku C ++ razlaga vsebino niza kot celotno številko podane osnove in vrne njeno vrednost kot long long int.

Ta funkcija nastavi tudi kazalec, ki kaže na prvi znak za zadnjim veljavnim znakom niza, če obstaja, sicer je kazalec nastavljen na nič.

 Za osnovo 10 in niz "201xz $" Veljavni številski del -> 201 Prvi znak za veljavnim številskim delom -> x

prototip strtoll () (od standarda C ++ 11)

 long long int strtoll (const char * str, char ** end, int base);

Funkcija strtoll () za parameter vzame niz, kazalec na znak in celoštevilčno vrednost - osnova, interpretira vsebino niza kot integralno število dane osnove in vrne dolgo dolgo int vrednost.

Ta funkcija je definirana v datoteki glave.

parametri strtoll ()

  • str: Niz, ki ima predstavitev integralnega števila.
  • konec: sklic na že dodeljeni objekt tipa char *. Vrednost end funkcija nastavi na naslednji znak v str za zadnjim veljavnim znakom. Ta parameter je lahko tudi ničelni kazalec, v tem primeru se ne uporablja.
  • osnova: osnova integralne vrednosti. Nabor veljavnih vrednosti za osnovo je (0, 2, 3,…, 35, 36).

strtoll () Vrnjena vrednost

Funkcija strtoll () vrne:

  • dolga dolga vrednost int (ki se pretvori iz niza).
  • 0, če ni bilo mogoče izvesti nobene veljavne pretvorbe.

Primer 1: Kako deluje funkcija strtoll ()?

 #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; )

Ko zaženete program, bo rezultat:

 Vrednost niza = 13.5ab_1x Dolga dolga int vrednost = 13 Končni niz = .5ab_1x Vrednost niza = 13 Dolga dolga int vrednost = 13 Ničelni kazalec

Veljavna celoštevilčna vrednost funkcije strtoll () je sestavljena iz:

  • Izbirni znak + ali -.
  • Predpona 0 za osmiško osnovo (velja samo, če je osnova = 8 ali 0).
  • Predpona 0x ali 0X za šestnajstiško osnovo (velja samo, če je osnova = 16 ali 0).
  • Zaporedje števk in / ali abeced (če je osnova večja od 10).

Veljavne vrednosti za osnovo parametrov so (0, 2, 3,…, 35, 36). Nabor veljavnih številk za osnovo 2 je (0, 1), za osnovo 3 je (0, 1, 2) in tako naprej.

Pri osnovah od 11 do 36 veljavne številke vključujejo abecede. Nabor veljavnih števk za osnovo 11 je (0, 1,…, 9, A, a), za osnovo 12 je (0, 1,…, 9, A, a, B, b) itd.

Primer 2: funkcija strtoll () z različnimi bazami

 #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; )

Ko zaženete program, bo rezultat:

 23ajz do Long Long Int s base-7 = 17 Končni niz = ajz 23ajz do Long Long Int z base-20 = 17419 Končni niz = z 23ajz do Long Long Int z base-36 = 3512879 Končni niz =

Funkcija strtoll () prezre vse vodilne presledke, dokler ne najde primarnega znaka, ki ni presledek.

Na splošno veljaven celoštevilčni argument za funkcijo strtoll () ima naslednjo obliko:

 (presledek) (- | +) (0 | 0x) (alfanumerični znaki)

Nato, začenši s tem znakom, vzame čim več znakov, ki tvori veljavno celoštevilsko predstavitev in jih pretvori v dolgo dolgo int vrednost. Karkoli je ostalo od niza po zadnjem veljavnem znaku, se prezre in ne vpliva na rezultat.

Primer 3: funkcija strtoll () za vodenje presledkov in neveljavno pretvorbo

 #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; )

Ko zaženete program, bo rezultat:

 25axbz do Long Long Int z base-11 = 307 Končni niz = xbz 110bcd do Long Long Int z base-2 = 6 Končni niz = bcd ax110.97 do Long Long Int z base-10 = 0 Končni niz = ax110.97

Če je osnova 0, se številska osnova samodejno določi s pogledom na obliko niza. Če je predpona 0, je osnova osmična (8). Če je predpona 0x ali 0X, je osnova šestnajstiška (16), sicer pa je osnova decimalna (10).

Primer 4: funkcija strtoll () z osnovo 0

 #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; )

Ko zaženete program, bo rezultat:

 025x do Long Long Int s base-0 = 21 Končni niz = x 0xf1x do Long Long Int z base-0 = 241 Končni niz = x 15ab do Long Long Int z base-0 = 15 Končni niz = ab

Zanimive Članki...