C ++ strtol () - C ++ Standardbibliotek

Funktionen strtol () i C ++ tolkar innehållet i en sträng som ett integrerat nummer i den angivna basen och returnerar dess värde som ett långt int.

Funktionen strtol () i C ++ tolkar innehållet i en sträng som ett integrerat nummer i den angivna basen och returnerar dess värde som ett långt int. Den här funktionen ställer också in en pekare för att peka på det första tecknet efter det sista giltiga tecknet i strängen om det finns någon, annars är pekaren inställd på null.

 För bas 10 och strängen "12abc": Giltig numerisk del -> 12 Första tecknet efter giltig numerisk del -> a

strtol () prototyp (Från och med C ++ 11 standard)

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

Strtol () -funktionen tar sträng, en pekare till tecken och ett heltalvärde - bas som parameter, tolkar strängens innehåll som ett integrerat nummer i den givna basen och returnerar ett långt int-värde.

Denna funktion definieras i rubrikfilen.

strtol () Parametrar

  • str: En sträng som representerar ett integrerat tal.
  • end:Hänvisning till ett redan tilldelat objekt av typen char *. Värdet på slutet ställs in av funktionen till nästa tecken i str efter det sista giltiga tecknet. Denna parameter kan också vara en nollpekare, i vilket fall den inte används.
  • base:Grunden för det integrerade värdet. Uppsättningen av giltiga värden för bas är (0, 2, 3,…, 35, 36).

strtol () Returvärde

Funktionen strtol () returnerar:

  • ett långt int-värde (som konverteras från strängen).
  • 0 om ingen giltig konvertering kunde utföras.

Exempel 1: Hur fungerar 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ör programmet blir resultatet:

 Antal i sträng = 27ab_1x Antal i lång int = 27 slutsträng = ab_1x antal i sträng = 27 Antal i lång int = 27 Nollpekare

Ett giltigt heltal för strtol () -funktionen består av:

  • Ett valfritt + eller - tecken.
  • Ett prefix 0 för oktal bas (gäller endast när bas = 8 eller 0).
  • Ett prefix 0x eller 0X för hexadecimal bas (gäller endast när bas = 16 eller 0).
  • En sekvens av siffror och / eller alfabet (om basen är större än 10).

De giltiga värdena för parameterbas är (0, 2, 3,…, 35, 36). En uppsättning giltiga siffror för bas 2 är (0, 1), för bas 3 är (0, 1, 2) och så vidare. För baser som börjar från 11 till 36 inkluderar giltiga siffror alfabet. Uppsättningen med giltiga siffror för bas 11 är (0, 1,…, 9, A, a), för bas 12 är (0, 1,…, 9, A, a, B, b) och så vidare.

Obs! Det är viktigt att komma ihåg att ett giltigt tecken för en bas kan hamna i ogiltig sträng för en annan bas som i exemplet nedan.

Exempel 2: strtol () -funktion med olika 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ör programmet blir resultatet:

 128bz till Long Int med bas-5 = 7 Endsträng = 8bxz 128bz till Long Int med bas-12 = 2123 Endsträng = xz 128bz till Long Int med base-36 = 64214135 Endsträng = 

Strtol () -funktionen ignorerar alla ledande blankstegstecken tills det primära tecknet som inte är mellanslag hittas.

I allmänhet har ett giltigt heltalargument för strtol () -funktionen följande form:

 (blanksteg) (- | +) (0 | 0x) (alfanumeriska tecken)

Från och med denna karaktär tar det så många tecken som möjligt som bildar en giltig helhetsrepresentation och omvandlar dem till ett långt int-värde. Oavsett vad som är kvar av strängen efter att den sista giltiga karaktären ignoreras och har ingen inverkan på resultatet.

Exempel 3: strtol () -funktion för ledande blanksteg och ogiltig 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ör programmet blir resultatet:

 25axbz till Long Int med bas-11 = 307 Ändsträng = xbz 110bcd till Long Int med bas-2 = 6 Endsträng = bcd ax110.97 till Long Int med bas-10 = 0 Ändsträng = ax110.97 

Om basen är 0 bestäms den numeriska basen automatiskt genom att titta på strängens format. Om prefixet är 0 är basen oktal (8). Om prefixet är 0x eller 0X är basen hexadecimal (16), annars är basen decimal (10).

Exempel 4: funktion strtol () med bas 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ör programmet blir resultatet:

0128ai till Long Int med bas-0 = 10 Ändsträng = 8ai 0x15axzz till Long Int med bas-0 = 346 Ändsträng = xzz 23dfl till Long Int med bas-0 = 23 Ändsträng = dfl 

Intressanta artiklar...