C ++ strtol () - standardní knihovna C ++

Funkce strtol () v C ++ interpretuje obsah řetězce jako celé číslo zadaného základu a vrátí jeho hodnotu jako dlouhý int.

Funkce strtol () v C ++ interpretuje obsah řetězce jako celé číslo zadaného základu a vrátí jeho hodnotu jako dlouhý int. Tato funkce také nastaví ukazatel tak, aby ukazoval na první znak za posledním platným znakem řetězce, pokud existuje, jinak je ukazatel nastaven na null.

 Pro základnu 10 a řetězec „12abc“: Platná číselná část -> 12 První znak po platné číselné části -> a

strtol () prototyp (podle standardu C ++ 11)

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

Funkce strtol () přebírá jako svůj parametr řetězec, ukazatel na znak a celočíselnou hodnotu - základna, interpretuje obsah řetězce jako celé číslo dané základny a vrací hodnotu long int.

Tato funkce je definována v hlavičkovém souboru.

strtol () Parametry

  • str: Řetězec mající zastoupení celočíselného čísla.
  • end:Odkaz na již přidělený objekt typu char *. Hodnota end je nastavena funkcí na další znak v str za posledním platným znakem. Tento parametr může být také nulový ukazatel, v takovém případě se nepoužívá.
  • base:Základ integrální hodnoty. Sada platných hodnot pro základnu je (0, 2, 3,…, 35, 36).

strtol () Návratová hodnota

Funkce strtol () vrací:

  • dlouhá hodnota int (která je převedena z řetězce).
  • 0, pokud nelze provést platný převod.

Příklad 1: Jak strtol () funguje v 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; ) 

Když spustíte program, výstup bude:

 Number in String = 27ab_1x Number in Long Int = 27 End String = ab_1x Number in String = 27 Number in Long Int = 27 Null pointer

Platná celočíselná hodnota pro funkci strtol () se skládá z:

  • Volitelné znaménko + nebo -.
  • Předpona 0 pro osmičkový základ (platí pouze v případě, že základna = 8 nebo 0).
  • Prefix 0x nebo 0X pro hexadecimální základnu (platí pouze v případě, že základna = 16 nebo 0).
  • Posloupnost číslic a / nebo abeced (pokud je základna větší než 10).

Platné hodnoty pro základnu parametrů jsou (0, 2, 3,…, 35, 36). Sada platných číslic pro základnu 2 je (0, 1), pro základnu 3 je (0, 1, 2) atd. U základen začínajících od 11 do 36 zahrnují platné číslice abecedy. Sada platných číslic pro základnu 11 je (0, 1,…, 9, A, a), pro základnu 12 je (0, 1, …, 9, A, a, B, b) atd.

Poznámka: Je důležité si uvědomit, že platný znak pro jednu základnu může skončit v neplatném řetězci pro jinou základnu, jak je uvedeno v příkladu níže.

Příklad 2: Funkce strtol () s různými bázemi

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

Když spustíte program, výstup bude:

 128 bz na Long Int s base-5 = 7 End String = 8bxz 128 bz na Long Int s base-12 = 2123 End String = xz 128 bz na Long Int s base-36 = 64214135 End String = 

Funkce strtol () ignoruje všechny úvodní prázdné znaky, dokud není nalezen primární znak bez mezer.

Platný celočíselný argument pro funkci strtol () má obecně následující tvar:

 (mezery) (- | +) (0 | 0x) (alfanumerické znaky)

Poté, počínaje tímto znakem, trvá co nejvíce znaků, které vytvoří platnou celočíselnou reprezentaci a převede je na dlouhou hodnotu int. Cokoli, co zbylo z řetězce po posledním platném znaku, je ignorováno a nemá to žádný vliv na výsledek.

Příklad 3: Funkce strtol () pro vedení mezer a neplatný převod

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

Když spustíte program, výstup bude:

 25axbz na Long Int s base-11 = 307 End String = xbz 110bcd na Long Int s base-2 = 6 End String = bcd ax110.97 na Long Int s base-10 = 0 End String = ax110.97 

Pokud je základna 0, číselná základna se určí automaticky při pohledu na formát řetězce. Pokud je předpona 0, základ je osmičkový (8). Pokud je předpona 0x nebo 0X, základna je šestnáctková (16), jinak je základna desítková (10).

Příklad 4: funkce strtol () se základnou 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; )

Když spustíte program, výstup bude:

0128ai na Long Int s base-0 = 10 End String = 8ai 0x15axzz na Long Int s base-0 = 346 End String = xzz 23dfl na Long Int s base-0 = 23 End String = dfl 

Zajímavé články...