C ++ strtol () - C ++ Standardbibliotek

Strtol () -funksjonen i C ++ tolker innholdet i en streng som et integrert tall i den angitte basen og returnerer verdien som en lang int.

Strtol () -funksjonen i C ++ tolker innholdet i en streng som et integrert tall i den angitte basen og returnerer verdien som en lang int. Denne funksjonen setter også en peker for å peke på det første tegnet etter strengens siste gyldige tegn hvis det er noen, ellers er pekeren satt til null.

 For base 10 og strengen "12abc": Gyldig numerisk del -> 12 Første tegn etter gyldig numerisk del -> a

strtol () prototype (Per C ++ 11 standard)

 lang int strtol (const char * str, char ** end, int base);

Strtol () -funksjonen tar streng, en peker til tegn og en heltalsverdi - base som parameter, tolker strengens innhold som et integrert tall på den gitte basen og returnerer en lang int-verdi.

Denne funksjonen er definert i topptekstfilen.

strtol () Parametere

  • str: En streng med representasjonen av et integrert tall.
  • end:Henvisning til et allerede tildelt objekt av typen char *. Verdien på slutten settes av funksjonen til neste tegn i str etter det siste gyldige tegnet. Denne parameteren kan også være en nullpeker, i så fall brukes den ikke.
  • base:Grunnlaget for den integrerte verdien. Settet med gyldige verdier for basen er (0, 2, 3,…, 35, 36).

strtol () Returverdi

Funksjonen strtol () returnerer:

  • en lang int-verdi (som konverteres fra strengen).
  • 0 hvis ingen gyldig konvertering kunne utføres.

Eksempel 1: Hvordan strtol () fungerer i 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; ) 

Når du kjører programmet, vil utdataene være:

 Antall i streng = 27ab_1x Antall i lang int = 27 Slutt streng = ab_1x Antall i streng = 27 Antall i lang int = 27 Null peker

En gyldig heltallverdi for strtol () -funksjonen består av:

  • Et valgfritt + eller - tegn.
  • Et prefiks 0 for oktal base (gjelder bare når base = 8 eller 0).
  • Et prefiks 0x eller 0X for heksadesimal base (gjelder bare når base = 16 eller 0).
  • En sekvens med sifre og / eller alfabet (hvis basen er større enn 10).

De gyldige verdiene for parameterbase er (0, 2, 3,…, 35, 36). Et sett med gyldige sifre for base 2 er (0, 1), for base 3 er (0, 1, 2) og så videre. For baser fra 11 til 36 inkluderer gyldige sifre alfabet. Settet med gyldige sifre for base 11 er (0, 1,…, 9, A, a), for base 12 er (0, 1,…, 9, A, a, B, b) og så videre.

Merk: Det er viktig å huske at et gyldig tegn for en base kan havne i den ugyldige strengen for en annen base som i eksemplet nedenfor.

Eksempel 2: strtol () -funksjon med forskjellige baser

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

Når du kjører programmet, vil utdataene være:

 128bz til Long Int med base-5 = 7 Endstreng = 8bxz 128bz til Long Int med base-12 = 2123 Endstreng = xz 128bz til Long Int med base-36 = 64214135 Endstreng = 

Strtol () -funksjonen ignorerer alle de ledende blanktegnene til det primære ikke-hvite mellomromstegnet er funnet.

Generelt har et gyldig heltallargument for strtol () -funksjonen følgende form:

 (mellomrom) (- | +) (0 | 0x) (alfanumeriske tegn)

Fra dette tegnet tar det så mange tegn som mulig som danner en gyldig heltallrepresentasjon og konverterer dem til en lang int-verdi. Uansett hva som er igjen av strengen etter at det siste gyldige tegnet blir ignorert og har ingen innvirkning på resultatet.

Eksempel 3: funksjonen strtol () for ledende mellomrom og ugyldig konvertering

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

Når du kjører programmet, vil utdataene være:

 25axbz til Long Int med base-11 = 307 Endstreng = xbz 110bcd til Long Int med base-2 = 6 Endstreng = bcd ax110.97 til Long Int med base-10 = 0 Endstreng = ax110.97 

Hvis basen er 0, bestemmes den numeriske basen automatisk ved å se på strengens format. Hvis prefikset er 0, er basen oktal (8). Hvis prefikset er 0x eller 0X, er basen heksadesimal (16), ellers er basen desimal (10).

Eksempel 4: strtol () -funksjon med base 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; )

Når du kjører programmet, vil utdataene være:

0128ai til Long Int med base-0 = 10 Endstreng = 8ai 0x15axzz til Long Int med base-0 = 346 Endstreng = xzz 23dfl til Long Int med base-0 = 23 Endstreng = dfl 

Interessante artikler...