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

Funkcija strtol () v jeziku C ++ razlaga vsebino niza kot celotno številko podane osnove in vrne njegovo vrednost kot dolg int.

Funkcija strtol () v jeziku C ++ razlaga vsebino niza kot celotno številko podane osnove in vrne njeno vrednost kot dolg 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 "12abc": Veljavni številski del -> 12 Prvi znak za veljavnim številskim delom -> a

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

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

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

Ta funkcija je definirana v datoteki glave.

parametri strtol ()

  • str: Niz, ki ima predstavitev integralnega števila.
  • end: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.
  • base:Osnova integralne vrednosti. Nabor veljavnih vrednosti za osnovo je (0, 2, 3,…, 35, 36).

strtol () Vrnjena vrednost

Funkcija strtol () vrne:

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

Primer 1: Kako deluje strtol () v jeziku C ++?

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

Ko zaženete program, bo rezultat:

 Število v nizu = 27ab_1x Število v dolgem Int = 27 Končni niz = ab_1x Število v nizu = 27 Število v dolgem Int = 27 Ničelni kazalec

Veljavna celoštevilčna vrednost funkcije strtol () 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.

Opomba: Pomembno je vedeti, da lahko veljaven znak za eno osnovo konča v neveljavnem nizu za drugo osnovo, kot v spodnjem primeru.

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

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

Ko zaženete program, bo rezultat:

 128bz do Long Int s base-5 = 7 Končni niz = 8bxz 128bz do Long Int z base-12 = 2123 Končni niz = xz 128bz do Long Int z base-36 = 64214135 Končni niz = 

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

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

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

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

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

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

Ko zaženete program, bo rezultat:

 25axbz do Long Int z base-11 = 307 Končni niz = xbz 110bcd do Long Int z base-2 = 6 Končni niz = bcd ax110.97 do 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 strtol () z osnovo 0

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

Ko zaženete program, bo rezultat:

0128ai do Long Int z base-0 = 10 Končni niz = 8ai 0x15axzz do Long Int z base-0 = 346 Končni niz = xzz 23dfl do Long Int z base-0 = 23 Končni niz = dfl 

Zanimive Članki...