C ++ strtol () - C ++ szabványos könyvtár

A strtol () függvény a C ++ - ban a karakterlánc tartalmát a megadott bázis integrálszámaként értelmezi, és értékét hosszú int-ként adja vissza.

A strtol () függvény a C ++ - ban a karakterlánc tartalmát a megadott bázis integrálszámaként értelmezi, és értékét hosszú int-ként adja vissza. Ez a függvény egy olyan mutatót is beállít, amely a karakterlánc utolsó érvényes karaktere után az első karakterre mutat, ha van ilyen, különben a mutató nullára van állítva.

 A 10. alap és a "12abc" karaktersorozat esetén: Érvényes numerikus rész -> 12 Az első karakter az érvényes numerikus rész után -> a

strtol () prototípus (C ++ 11 szabvány szerint)

 hosszú int strtol (const char * str, char ** end, int alap);

Az strtol () függvény a karakterláncot, a mutatót a karakterhez és az egész érték alapot veszi paraméterül, a karakterlánc tartalmát az adott bázis integrálszámaként értelmezi, és hosszú int értéket ad vissza.

Ezt a függvényt a fejlécfájl határozza meg.

strtol () Paraméterek

  • str: Karakterlánc, amely integrális számot képvisel.
  • end:Hivatkozás egy char * típusú, már lefoglalt objektumra. A vég értékét a függvény a következő karakterre állítja be az utolsó érvényes karakter után. Ez a paraméter lehet egy null mutató is, ebben az esetben nem használják.
  • base:Az integrálérték alapja. Az alap érvényes értékeinek halmaza (0, 2, 3,…, 35, 36).

strtol () Visszatérési érték

Az strtol () függvény visszatér:

  • hosszú int érték (amelyet a karakterláncból konvertálunk).
  • 0, ha nem lehet érvényes konverziót végrehajtani.

1. példa: Hogyan működik az strtol () C ++ nyelven?

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

A program futtatásakor a kimenet a következő lesz:

 Szám stringben = 27ab_1x Szám hosszú int = 27 vég karakterlánc = ab_1x szám stringben = 27 szám hosszú int = 27 null mutató

Az strtol () függvény érvényes egész értéke a következőkből áll:

  • Opcionális + vagy - jel.
  • 0 előtag az oktális bázishoz (csak akkor érvényes, ha a bázis = 8 vagy 0).
  • 0x vagy 0X előtag hexadecimális bázisra (csak akkor alkalmazható, ha a bázis = 16 vagy 0).
  • Számjegyek és / vagy ábécék sorozata (ha az alap nagyobb, mint 10).

A paraméteralap érvényes értékei: (0, 2, 3,…, 35, 36). A 2. bázis érvényes számjegyeinek halmaza (0, 1), a 3. bázis esetében (0, 1, 2) és így tovább. A 11 és 36 közötti bázisok esetében az érvényes számjegyek ábécét tartalmaznak. A 11 bázis érvényes számjegyeinek halmaza (0, 1,…, 9, A, a), a 12 bázis esetében (0, 1,…, 9, A, a, B, b) és így tovább.

Megjegyzés: Fontos megjegyezni, hogy az egyik bázis érvényes karaktere egy másik bázis érvénytelen karakterláncába kerülhet, mint az alábbi példában.

2. példa: strtol () függvény különböző bázisokkal

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

A program futtatásakor a kimenet a következő lesz:

 128 bz-tól hosszú int-ig alap-5 = 7 végső karakterlánc = 8 bxz-től 128 bz-ig hosszú int-ig alap-12-ig = 2123 vég-húr = xz 128 bz-tól hosszú int-ig alap-36-ig = 64214135 végső karakterlánc = 

Az strtol () függvény mindaddig figyelmen kívül hagyja az összes vezető szóközt, amíg az elsődleges nem fehér szóköz megtalálható.

Általában az strtol () függvény érvényes egész argumentuma a következő formában van:

 (szóköz) (- | +) (0 | 0x) (alfanumerikus karakterek)

Ezután, ebből a karakterből kiindulva, a lehető legtöbb karakterre van szükség, amely érvényes egész ábrázolást alkot, és hosszú int értékké alakítja őket. Bármi, ami az utolsó érvényes karakter után marad a karakterláncból, figyelmen kívül marad, és nincs hatása az eredményre.

3. példa: strtol () függvény a szóköz és az érvénytelen konverzió vezetéséhez

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

A program futtatásakor a kimenet a következő lesz:

 25axbz-tól hosszú int-ig alap-11 = 307 végső húr = xbz 110 bcd-tól hosszú int-ig alap-2-ig = 6 vég-húr = bcd ax110.97-ig hosszú int-ig alap-10 = 0 vég-húr = ax110.97 

Ha az alap 0, akkor a numerikus alapot automatikusan meghatározza a karakterlánc formátumának megnézésével. Ha az előtag 0, akkor az alapja oktális (8). Ha az előtag 0x vagy 0X, akkor az alap hexadecimális (16), különben az alap decimális (10).

4. példa: strtol () függvény 0 bázissal

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

A program futtatásakor a kimenet a következő lesz:

0128ai - hosszú int bázis-0 = 10 végső karakterlánc = 8ai 0x15axzz - hosszú int bázis-0 = 346 vég húr = xzz 23dfl - hosszú int alap-0 = 23 vég húr = dfl 

érdekes cikkek...