C ++ strtol () - biblioteka standardowa C ++

Funkcja strtol () w C ++ interpretuje zawartość łańcucha jako liczbę całkowitą określonej bazy i zwraca jej wartość jako long int.

Funkcja strtol () w C ++ interpretuje zawartość łańcucha jako liczbę całkowitą określonej podstawy i zwraca jej wartość jako long int. Ta funkcja ustawia również wskaźnik tak, aby wskazywał na pierwszy znak po ostatnim prawidłowym znaku ciągu, jeśli taki istnieje, w przeciwnym razie wskaźnik jest ustawiony na null.

 Dla podstawy 10 i ciągu „12abc”: Prawidłowa część numeryczna -> 12 Pierwszy znak po prawidłowej części numerycznej -> a

strtol () prototyp (w standardzie C ++ 11)

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

Funkcja strtol () przyjmuje jako parametr ciąg, wskaźnik do znaku i wartość całkowitą - base, interpretuje zawartość ciągu jako liczbę całkowitą podanej bazy i zwraca wartość typu long int.

Ta funkcja jest zdefiniowana w pliku nagłówkowym.

strtol () Parametry

  • str: Łańcuch reprezentujący liczbę całkowitą.
  • end:Odniesienie do już przydzielonego obiektu typu char *. Wartość end jest ustawiana przez funkcję na następny znak w str po ostatnim prawidłowym znaku. Ten parametr może być również wskaźnikiem zerowym, w którym to przypadku nie jest używany.
  • base:Podstawa wartości całkowitej. Zestaw poprawnych wartości dla podstawy to (0, 2, 3,…, 35, 36).

strtol () Zwracana wartość

Funkcja strtol () zwraca:

  • długa wartość int (która jest konwertowana z ciągu).
  • 0, jeśli nie można przeprowadzić żadnej prawidłowej konwersji.

Przykład 1: Jak strtol () działa w 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; ) 

Po uruchomieniu programu wynik będzie następujący:

 Number in String = 27ab_1x Number in Long Int = 27 End String = ab_1x Number in String = 27 Number in Long Int = 27 Wskaźnik zerowy

Prawidłowa liczba całkowita dla funkcji strtol () składa się z:

  • Opcjonalny znak + lub -.
  • Prefiks 0 dla podstawy ósemkowej (ma zastosowanie tylko wtedy, gdy podstawa = 8 lub 0).
  • Prefiks 0x lub 0X dla szesnastkowej podstawy (ma zastosowanie tylko wtedy, gdy podstawa = 16 lub 0).
  • Sekwencja cyfr i / lub alfabetów (jeśli podstawa jest większa niż 10).

Poprawne wartości parametru base to (0, 2, 3,…, 35, 36). Zestaw prawidłowych cyfr dla podstawy 2 to (0, 1), dla podstawy 3 to (0, 1, 2) i tak dalej. W przypadku podstaw zaczynających się od 11 do 36 prawidłowe cyfry obejmują alfabety. Zbiór prawidłowych cyfr dla podstawy 11 to (0, 1,…, 9, A, a), dla podstawy 12 to (0, 1,…, 9, A, a, B, b) i tak dalej.

Uwaga: Ważne jest, aby pamiętać, że prawidłowy znak dla jednej bazy może skończyć się w nieprawidłowym ciągu dla innej bazy, jak w przykładzie poniżej.

Przykład 2: funkcja strtol () z różnymi zasadami

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

Po uruchomieniu programu wynik będzie następujący:

 128bz do Long Int z podstawą-5 = 7 End String = 8bxz 128bz do Long Int z podstawą-12 = 2123 End String = xz 128bz do Long Int z podstawą-36 = 64214135 End String = 

Funkcja strtol () ignoruje wszystkie wiodące białe znaki, dopóki nie zostanie znaleziony główny znak niebędący białymi znakami.

Ogólnie rzecz biorąc, prawidłowy argument będący liczbą całkowitą dla funkcji strtol () ma następującą postać:

 (białe znaki) (- | +) (0 | 0x) (znaki alfanumeryczne)

Następnie, zaczynając od tego znaku, przyjmuje jak najwięcej znaków, które tworzą prawidłową reprezentację liczby całkowitej i konwertują je na wartość typu long int. Cokolwiek pozostało z ciągu po ostatnim prawidłowym znaku, jest ignorowane i nie ma wpływu na wynik.

Przykład 3: funkcja strtol () dla wiodących białych znaków i nieprawidłowej konwersji

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

Po uruchomieniu programu wynik będzie następujący:

 25axbz do Long Int z podstawą-11 = 307 End String = xbz 110bcd do Long Int z podstawą-2 = 6 End String = bcd ax110.97 do Long Int z podstawą-10 = 0 End String = ax110.97 

Jeśli podstawą jest 0, podstawa liczbowa jest określana automatycznie na podstawie formatu ciągu. Jeśli przedrostkiem jest 0, podstawą jest ósemkowa (8). Jeśli prefiks to 0x lub 0X, podstawą jest szesnastkowa (16), w przeciwnym razie podstawa jest dziesiętna (10).

Przykład 4: funkcja strtol () o podstawie 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; )

Po uruchomieniu programu wynik będzie następujący:

0128ai do Long Int z podstawą-0 = 10 End String = 8ai 0x15axzz to Long Int with base-0 = 346 End String = xzz 23dfl to Long Int with base-0 = 23 End String = dfl 

Interesujące artykuły...