C ++ strtol () - C ++ standardraamatukogu

Funktsioon strtol () tõlgendab C ++ keeles stringi sisu määratud baasi integraalarvuna ja tagastab selle väärtuse pika int-na.

Funktsioon strtol () tõlgendab C ++ keeles stringi sisu määratud baasi integraalarvuna ja tagastab selle väärtuse pika int-na. See funktsioon paneb ka kursori näitama stringi viimase kehtiva märgi järel oleva esimese märgi poole, kui see on olemas, vastasel juhul on kursor null.

 Aluse 10 ja stringi "12abc" korral: kehtiv arvuline osa -> 12 Esimene märk pärast kehtivat numbrilist osa -> a

strtol () prototüüp (standardi C ++ 11 järgi)

 pikk int strtol (const char * str, char ** ots, int alus);

Funktsioon strtol () võtab parameetriks stringi, kursori tähemärgi ja täisarvu base - baasi, tõlgendab stringi sisu antud baasi terviknumbrina ja tagastab pika int-väärtuse.

See funktsioon on määratletud päisefailis.

strtol () parameetrid

  • str: String, millel on integraalarv.
  • end:Viide juba eraldatud objektile, mille tüüp on char *. Lõppväärtuse määrab funktsioon järgmisele märgile stringides pärast viimast kehtivat tähemärki. See parameeter võib olla ka nullkursor, sel juhul seda ei kasutata.
  • base:Integraalväärtuse alus. Baasi kehtivate väärtuste komplekt on (0, 2, 3,…, 35, 36).

strtol () Tagastusväärtus

Funktsioon strtol () tagastab:

  • pikk int väärtus (mis teisendatakse stringist).
  • 0, kui kehtivat teisendamist ei õnnestunud teha.

Näide 1: Kuidas strtol () töötab versioonis 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; ) 

Programmi käivitamisel on väljund järgmine:

 Number stringis = 27ab_1x arv pikas keskmises = 27 lõpu string = ab_1x arv stringis = 27 number pikas keskmises = 27 nullnäit

Funktsiooni strtol () kehtiv täisarv sisaldab järgmist:

  • Valikuline märk + või -.
  • Oktaalaluse eesliide 0 (kehtib ainult siis, kui alus = 8 või 0).
  • Kuueteistkümnendkohalise baasi eesliide 0x või 0X (kehtib ainult siis, kui alus = 16 või 0).
  • Numbrite ja / või tähestike jada (kui alus on suurem kui 10).

Parameetri baasi kehtivad väärtused on (0, 2, 3,…, 35, 36). Baasi 2 kehtivate numbrite komplekt on (0, 1), baasi 3 puhul on (0, 1, 2) ja nii edasi. Aluste 11–36 alustel sisaldavad kehtivad numbrid tähestikke. Baasi 11 kehtivate numbrite komplekt on (0, 1,…, 9, A, a), baasi 12 jaoks on (0, 1,…, 9, A, a, B, b) ja nii edasi.

Märkus. Oluline on meeles pidada, et ühe baasi kehtiv märk võib sattuda teise baasi kehtetu stringi, nagu allpool toodud näites.

Näide 2: funktsioon strtol () erinevate alustega

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

Programmi käivitamisel on väljund järgmine:

 128bz kuni pikk keskmine koos baas-5 = 7 otsanööriga = 8bxz 128 bz kuni pikk keskmine koos baasiga-12 = 2123 lõpp-string = xz 128 bz kuni pikk keskmine koos alusega-36 = 64214135 lõpp-string = 

Funktsioon strtol () ignoreerib kõiki juhtivaid tühimärke, kuni leitakse esmane mitte-tühimärk.

Üldiselt on funktsiooni strtol () kehtiv täisarvu argument järgmisel kujul:

 (tühik) (- | +) (0 | 0x) (tähtnumbrilised tähemärgid)

Seejärel, alates sellest märgist, võtab see võimalikult palju märke, mis moodustavad kehtiva täisarvu kujutise ja teisendavad need pikaks int-väärtuseks. Kõik, mis jääb stringist järele pärast viimase kehtiva märgi eiramist, ei mõjuta tulemust.

Näide 3: funktsioon strtol () tühimärgi ja kehtetu teisendamise juhtimiseks

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

Programmi käivitamisel on väljund järgmine:

 25axbz kuni pikk Int koos baas-11 = 307 End String = xbz 110bcd kuni pikk Int koos base-2 = 6 otsanöör = bcd ax110.97 kuni pikk int koos base-10 = 0 end string = ax110.97 

Kui alus on 0, määratakse numbriline alus stringi vormingut vaadates automaatselt. Kui eesliide on 0, on alus kaheksand (8). Kui eesliide on 0x või 0X, on alus kuueteistkümnendsüsteem (16), vastasel juhul on alus kümnendkoht (10).

Näide 4: funktsioon strtol () alusega 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; )

Programmi käivitamisel on väljund järgmine:

0128ai kuni pikk keskmine baas-0 = 10 lõpustring = 8ai 0x15axzz kuni pikk keskmine baas-0 = 346 lõpu string = xzz 23dfl kuni pikk keskmine baas-0 = 23 otsistring = dfl 

Huvitavad Artiklid...