C ++ strtol () - C ++ Standardbibliotek

Funktionen strtol () i C ++ fortolker indholdet af en streng som et integralt tal i den angivne base og returnerer dens værdi som et langt int.

Funktionen strtol () i C ++ fortolker indholdet af en streng som et integralt tal i den angivne base og returnerer dens værdi som et langt int. Denne funktion indstiller også en markør til at pege på det første tegn efter strengens sidste gyldige tegn, hvis der er nogen, ellers er markøren indstillet til null.

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

strtol () prototype (pr. C ++ 11 standard)

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

Strtol () -funktionen tager streng, en markør til tegn og en heltalsværdi - base som sin parameter, fortolker strengens indhold som et integralt tal i den givne base og returnerer en lang int-værdi.

Denne funktion er defineret i headerfilen.

strtol () Parametre

  • str: En streng med repræsentationen af ​​et integreret tal.
  • end:Henvisning til et allerede tildelt objekt af typen char *. Værdien af ​​slut indstilles af funktionen til det næste tegn i str efter det sidste gyldige tegn. Denne parameter kan også være en nul pointer, i hvilket tilfælde den ikke bruges.
  • base:Grundlaget for den integrerede værdi. Sættet med gyldige værdier for base er (0, 2, 3,…, 35, 36).

strtol () Returværdi

Funktionen strtol () returnerer:

  • en lang int-værdi (som konverteres fra strengen).
  • 0, hvis der ikke kunne udføres nogen gyldig konvertering.

Eksempel 1: Hvordan fungerer strtol () 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 kører programmet, vil output være:

 Antal i streng = 27ab_1x Antal i lang int = 27 slutstreng = ab_1x antal i streng = 27 antal i lang intensitet = 27 Nul pointer

En gyldig heltalværdi for strtol () -funktionen består af:

  • Et valgfrit + eller - tegn.
  • Et præfiks 0 for oktal base (gælder kun når base = 8 eller 0).
  • Et præfiks 0x eller 0X for hexadecimal base (gælder kun når base = 16 eller 0).
  • En række af cifre og / eller alfabeter (hvis basen er større end 10).

De gyldige værdier for parameterbasen er (0, 2, 3,…, 35, 36). Et sæt gyldige cifre for base 2 er (0, 1), for base 3 er (0, 1, 2) og så videre. For baser, der starter fra 11 til 36, inkluderer gyldige cifre alfabeter. Sættet med gyldige cifre for base 11 er (0, 1,…, 9, A, a), for base 12 er (0, 1,…, 9, A, a, B, b) og så videre.

Bemærk: Det er vigtigt at huske, at et gyldigt tegn for en base kan ende i den ugyldige streng for en anden base som i eksemplet nedenfor.

Eksempel 2: strtol () funktion med forskellige 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 kører programmet, vil output være:

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

Funktionen strtol () ignorerer alle de førende blanktegn, indtil det primære ikke-hvide mellemrumstegn findes.

Generelt har et gyldigt heltalargument for strtol () -funktionen følgende form:

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

Derefter tager det så mange tegn som muligt fra denne karakter, der danner en gyldig heltalrepræsentation og konverterer dem til en lang int-værdi. Uanset hvad der er tilbage af strengen efter det sidste gyldige tegn ignoreres og har ingen indflydelse på resultatet.

Eksempel 3: strtol () -funktion til førende mellemrum 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 kører programmet, vil output være:

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

Hvis basen er 0, bestemmes den numeriske base automatisk ved at se på strengens format. Hvis præfikset er 0, er basen oktal (8). Hvis præfikset er 0x eller 0X, er basen hexadecimal (16), ellers er basen decimal (10).

Eksempel 4: funktion strtol () 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 kører programmet, vil output være:

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

Interessante artikler...