C ++ strtol () - C ++ standarta bibliotēka

Funkcija strtol () C ++ interpretē virknes saturu kā norādītās bāzes neatņemamu skaitli un atgriež tās vērtību kā garu int.

Strtol () funkcija C ++ interpretē virknes saturu kā norādītās bāzes neatņemamu skaitli un atgriež tās vērtību kā garu int. Šī funkcija arī norāda, ka rādītājs norāda uz pirmo rakstzīmi pēc pēdējās derīgās rakstzīmes, ja tādas ir, pretējā gadījumā rādītājs tiek iestatīts uz nulli.

 10. bāzei un virknei "12abc": derīga skaitliskā daļa -> 12 Pirmā rakstzīme pēc derīgas skaitliskās daļas -> a

strtol () prototips (pēc standarta C ++ 11)

 garš int strtol (const char * str, char ** gals, int bāze);

Funkcija strtol () par savu parametru ņem virkni, rādītāju uz rakstzīmi un veselu skaitli - bāze, virknes saturu interpretē kā dotās bāzes neatņemamu skaitli un atgriež garu int vērtību.

Šī funkcija ir definēta galvenes failā.

strtol () parametri

  • str: Virkne ar neatņemamu skaitli.
  • end:Atsauce uz jau piešķirtu char * tipa objektu. Beigu vērtību funkcija nosaka nākamajai rakstzīmei str pēc pēdējās derīgās rakstzīmes. Šis parametrs var būt arī nulles rādītājs, tādā gadījumā tas netiek izmantots.
  • base:Neatņemamās vērtības pamats. Bāzes derīgo vērtību kopa ir (0, 2, 3,…, 35, 36).

strtol () Atgriešanās vērtība

Funkcija strtol () atgriež:

  • gara int vērtība (kas tiek pārveidota no virknes).
  • 0, ja nevarēja veikt derīgu konversiju.

1. piemērs: Kā strtol () darbojas 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; ) 

Palaidot programmu, izeja būs:

 Skaitlis virknē = 27ab_1x Skaitlis garajā vidējā = 27 beigu virkne = ab_1x Skaitlis virknē = 27 Skaitlis garajā vidējā vērtībā = 27 Nulles rādītājs

Funkcijas strtol () derīga veselā skaitļa vērtība sastāv no:

  • Papildu + vai - zīme.
  • Oktāla pamatnes prefikss 0 (attiecas tikai tad, ja bāze = 8 vai 0).
  • Heksadecimālās bāzes prefikss 0x vai 0X (attiecas tikai tad, ja bāze = 16 vai 0).
  • Ciparu un / vai alfabētu secība (ja bāze ir lielāka par 10).

Parametra bāzes derīgās vērtības ir (0, 2, 3,…, 35, 36). Derīgo ciparu kopa pamatnei 2 ir (0, 1), pamatnei 3 ir (0, 1, 2) un tā tālāk. Bāzēm, kas sākas no 11 līdz 36, derīgos ciparos ir alfabēti. Derīgo ciparu kopa pamatnei 11 ir (0, 1,…, 9, A, a), pamatnei 12 ir (0, 1,…, 9, A, a, B, b) un tā tālāk.

Piezīme. Ir svarīgi atcerēties, ka derīgs vienas bāzes raksturs var nonākt nederīgā citas bāzes virknē, kā parādīts zemāk esošajā piemērā.

2. piemērs: funkcija strtol () ar dažādām bāzēm

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

Palaidot programmu, izeja būs:

 128bz līdz Long Int ar bāzes-5 = 7 gala virkni = 8bxz 128bz līdz Long Int ar bāzes-12 = 2123 beigu virkni = xz 128bz līdz Long Int ar pamatu-36 = 64214135 End virkne = 

Funkcija strtol () ignorē visas vadošās atstarpes rakstzīmes, līdz tiek atrasts primārais raksturs, kas nav atstarpes.

Parasti derīgam vesela skaitļa argumentam strtol () funkcijai ir šāda forma:

 (atstarpe) (- | +) (0 | 0x) (burtciparu rakstzīmes)

Tad, sākot ar šo rakstzīmi, ir nepieciešams pēc iespējas vairāk rakstzīmju, kas veido derīgu vesela skaitļa attēlojumu un pārveido tos par garu int vērtību. Tas, kas paliek pāri no virknes pēc pēdējās derīgās rakstzīmes, tiek ignorēts un neietekmē rezultātu.

3. piemērs: funkcija strtol (), lai vadītu atstarpi un nederīgu reklāmguvumu

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

Palaidot programmu, izeja būs:

 25axbz līdz Long Int ar bāzi-11 = 307 End String = xbz 110bcd līdz Long Int ar base-2 = 6 End String = bcd ax110.97 līdz Long Int ar bāzi-10 = 0 End String = ax110.97 

Ja bāze ir 0, skaitliskā bāze tiek noteikta automātiski, aplūkojot virknes formātu. Ja prefikss ir 0, pamats ir oktāls (8). Ja prefikss ir 0x vai 0X, bāze ir heksadecimālā (16), pretējā gadījumā bāze ir decimāldaļa (10).

4. piemērs: funkcija strtol () ar 0 bāzi

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

Palaidot programmu, izeja būs:

0128ai līdz Long Int ar bāzes-0 = 10 beigu virkni = 8ai 0x15axzz līdz Long Int ar base-0 = 346 beigu virkne = xzz 23dfl līdz Long Int ar bāzes-0 = 23 End virkni = dfl 

Interesanti raksti...