C ++ strtol () - C ++ standartinė biblioteka

Strtol () funkcija C ++ interpretuoja eilutės turinį kaip vientisą nurodytos bazės skaičių ir grąžina jos vertę kaip ilgą int.

Strtol () funkcija C ++ interpretuoja eilutės turinį kaip vientisą nurodytos bazės skaičių ir grąžina jos vertę kaip ilgą int. Ši funkcija taip pat nustato, kad žymeklis nukreiptų į pirmąjį simbolį po paskutinio galiojančio eilutės simbolio, jei toks yra, kitaip rodyklė nustatoma kaip nulis.

 10 pagrindo ir eilutės „12abc“: tinkama skaitinė dalis -> 12 Pirmasis simbolis po galiojančios skaitinės dalies -> a

strtol () prototipas (Pagal C ++ 11 standartą)

 ilgas int strtol (const char * str, char ** galas, int pagrindas);

Funkcija „strtol ()“ kaip parametrą laiko eilutę, žymiklį į simbolį ir sveiko skaičiaus reikšmę - bazė, eilutės turinį interpretuoja kaip vientisą nurodytos bazės skaičių ir grąžina ilgą int reikšmę.

Ši funkcija apibrėžta antraštės faile.

strtol () parametrai

  • str: Eilutė, turinti vientisąjį skaičių.
  • end:Nuoroda į jau priskirtą char * tipo objektą. Pabaigos reikšmę funkcija nustato kitam simboliui eilutėje po paskutinio galiojančio simbolio. Šis parametras taip pat gali būti nulinis rodyklė, tokiu atveju jis nenaudojamas.
  • base:Integraliosios vertės pagrindas. Galiojančių bazių verčių rinkinys yra (0, 2, 3,…, 35, 36).

strtol () Grąžinimo vertė

Funkcija strtol () grąžinama:

  • ilga int reikšmė (kuri konvertuojama iš eilutės).
  • 0, jei nepavyko atlikti galiojančio konvertavimo.

1 pavyzdys: Kaip strtol () veikia 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; ) 

Kai paleisite programą, išvestis bus:

 Skaičius eilutėje = ​​27ab_1x skaičius ilgoje vidurkyje = 27 pabaigos eilutė = ab_1x skaičius eilutėje = ​​27 skaičius ilgoje int = 27 nulinis rodyklė

Tinkamą funkcijos „strtol ()“ sveiką skaičių sudaro:

  • Pasirenkamas ženklas „+“ arba „-“.
  • Aštuntainio pagrindo priešdėlis 0 (taikomas tik tada, kai pagrindas = 8 arba 0).
  • Šešioliktainės bazės priešdėlis 0x arba 0X (taikomas tik tada, kai bazė = 16 arba 0).
  • Skaičių ir (arba) abėcėlių seka (jei pagrindas didesnis nei 10).

Tinkamos parametrų vertės yra (0, 2, 3,…, 35, 36). Galiojančių 2 bazės skaitmenų rinkinys yra (0, 1), 3 pagrindo yra (0, 1, 2) ir pan. Bazėms, prasidedančioms nuo 11 iki 36, galiojantys skaitmenys apima abėcėles. Galiojančių 11 bazės skaitmenų rinkinys yra (0, 1,…, 9, A, a), 12 pagrindo yra (0, 1,…, 9, A, a, B, b) ir pan.

Pastaba: Svarbu atsiminti, kad galiojantis vienos bazės simbolis gali atsidurti netinkamoje kitos bazės eilutėje, kaip parodyta toliau pateiktame pavyzdyje.

2 pavyzdys: strtol () funkcija su skirtingais pagrindais

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

Kai paleisite programą, išvestis bus:

 128bz - Long Int su bazine-5 = 7 pabaigos eilutė = 8bxz 128bz to Long Int su baze-12 = 2123 End String = xz 128bz - Long Int su base-36 = 64214135 End String = 

Funkcija „strtol ()“ ignoruoja visus pagrindinius tarpų simbolius, kol bus rastas pagrindinis ne tarpų simbolis.

Apskritai, tinkamas sveiko skaičiaus argumentas, skirtas strtol () funkcijai, yra tokios formos:

 (tarpai) (- | +) (0 | 0x) (raidiniai ir skaitiniai simboliai)

Tada, pradedant nuo šio simbolio, reikia kuo daugiau simbolių, kurie suformuoja galiojantį sveikojo skaičiaus vaizdą ir paverčia juos ilga int reikšme. Nepaisant to, kas lieka eilutėje po paskutinio galiojančio simbolio, tai neturi įtakos rezultatui.

3 pavyzdys: strtol () funkcija, leidžianti įvesti tarpą ir netinkamą konversiją

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

Kai paleisite programą, išvestis bus:

 25axbz to Long Int with base-11 = 307 End String = xbz 110bcd to Long Int with base-2 = 6 End String = bcd ax110.97 to Long Int with base-10 = 0 End String = ax110.97 

Jei pagrindas yra 0, skaitinė bazė nustatoma automatiškai, žiūrint į eilutės formatą. Jei priešdėlis yra 0, pagrindas yra aštuonkojis (8). Jei priešdėlis yra 0x arba 0X, pagrindas yra šešioliktainis (16), kitaip pagrindas yra dešimtainis (10).

4 pavyzdys: strtol () funkcija su 0 pagrindu

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

Kai paleisite programą, išvestis bus:

Nuo 0128ai iki ilgo vid. Su baze-0 = 10 pabaigos eilutė = 8ai 0x15axzz iki ilgo vid. Su bazine-0 = 346 pabaigos eilutė = xzz 23dfl iki ilgo vid. Su bazine-0 = 23 pabaigos eilutė = dfl 

Įdomios straipsniai...