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

Strtoll () funkcija C ++ interpretuoja eilutės turinį kaip vientisą nurodytos bazės skaičių ir grąžina jos vertę kaip ilgą 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 pagrindui ir eilutei „201xz $“. Tinkama skaitinė dalis -> 201 Pirmasis simbolis po galiojančios skaitinės dalies -> x

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

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

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

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

strtoll () parametrai

  • str: eilutė, turinti vientisą skaičių.
  • pabaiga: 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.
  • bazė: integralo vertės pagrindas. Galiojančių bazių verčių rinkinys yra (0, 2, 3,…, 35, 36).

strtoll () Grąžinimo vertė

Strtoll () funkcija grąžina:

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

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

Kai paleisite programą, išvestis bus:

 Stygos reikšmė = 13.5ab_1x ilgos ilgos int reikšmė = 13 pabaigos eilutė = .5ab_1x eilutės vertė = 13 ilgos ilgos int reikšmė = 13 nulinis rodyklė

Tinkamą funkcijos „strtoll ()“ sveikojo skaičiaus vertę 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.

2 pavyzdys: funkcija strtoll () su skirtingais pagrindais

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

Kai paleisite programą, išvestis bus:

 23-24 iki ilgų ilgų vid. Su baze-7 = 17 pabaigos eilutė = ajz

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

Apskritai, tinkamas sveiko skaičiaus argumentas, skirtas strtoll () 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 ilgąja int reikšme. Nepaisant to, kas lieka eilutėje po paskutinio galiojančio simbolio, tai neturi įtakos rezultatui.

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

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

Kai paleisite programą, išvestis bus:

 25axbz - Long Long Int su baze-11 = 307 End String = xbz 110bcd - Long Long Int Int with base-2 = 6 End String = bcd ax110.97 to Long 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: strtoll () funkcija su 0 pagrindu

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

Kai paleisite programą, išvestis bus:

 025x - ilgas ilgas vidinis su baze-0 = 21 pabaigos eilutė = x 0xf1x - ilgas ilgas vidinis su bazine-0 = 241 pabaigos eilutė = x 15ab iki ilgo ilgo vidutinio ilgio su bazine-0 = 15 pabaigos eilutė = ab

Įdomios straipsniai...