C ++ strtol () - C ++ Standardbibliothek

Die Funktion strtol () in C ++ interpretiert den Inhalt eines Strings als ganzzahlige Zahl der angegebenen Basis und gibt seinen Wert als long int zurück.

Die Funktion strtol () in C ++ interpretiert den Inhalt eines Strings als ganzzahlige Zahl der angegebenen Basis und gibt seinen Wert als long int zurück. Diese Funktion setzt auch einen Zeiger, der auf das erste Zeichen nach dem letzten gültigen Zeichen der Zeichenfolge zeigt, falls vorhanden, andernfalls wird der Zeiger auf null gesetzt.

 Für Basis 10 und die Zeichenfolge "12abc": Gültiger numerischer Teil -> 12 Erstes Zeichen nach gültigem numerischen Teil -> a

strtol () Prototyp (Stand C ++ 11 Standard)

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

Die Funktion strtol () verwendet einen String, einen Zeiger auf ein Zeichen und einen ganzzahligen Wert - base als Parameter, interpretiert den Inhalt des Strings als ganzzahlige Zahl der angegebenen Base und gibt einen langen int-Wert zurück.

Diese Funktion ist in der Header-Datei definiert.

strtol () Parameter

  • str: Eine Zeichenfolge mit der Darstellung einer ganzzahligen Zahl.
  • end:Verweis auf ein bereits zugewiesenes Objekt vom Typ char *. Der Wert von end wird von der Funktion auf das nächste Zeichen in str nach dem letzten gültigen Zeichen gesetzt. Dieser Parameter kann auch ein Nullzeiger sein. In diesem Fall wird er nicht verwendet.
  • base:Die Basis des Integralwertes. Die Menge der gültigen Werte für die Basis ist (0, 2, 3,…, 35, 36).

strtol () Rückgabewert

Die Funktion strtol () gibt Folgendes zurück:

  • Ein langer int-Wert (der aus der Zeichenfolge konvertiert wird).
  • 0, wenn keine gültige Konvertierung durchgeführt werden konnte.

Beispiel 1: Wie funktioniert strtol () in 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; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Nummer in String = 27ab_1x Nummer in Long Int = 27 End String = ab_1x Nummer in String = 27 Nummer in Long Int = 27 Nullzeiger

Ein gültiger ganzzahliger Wert für die Funktion strtol () besteht aus:

  • Ein optionales + oder - Zeichen.
  • Ein Präfix 0 für die Oktalbasis (gilt nur, wenn die Basis = 8 oder 0 ist).
  • Ein Präfix 0x oder 0X für die hexadezimale Basis (gilt nur, wenn die Basis = 16 oder 0 ist).
  • Eine Folge von Ziffern und / oder Alphabeten (wenn die Basis größer als 10 ist).

Die gültigen Werte für die Parameterbasis sind (0, 2, 3,…, 35, 36). Ein Satz gültiger Ziffern für Basis 2 ist (0, 1), für Basis 3 ist (0, 1, 2) und so weiter. Für Basen von 11 bis 36 enthalten gültige Ziffern Alphabete. Der Satz gültiger Ziffern für Basis 11 ist (0, 1,…, 9, A, a), für Basis 12 ist (0, 1,…, 9, A, a, B, b) und so weiter.

Hinweis: Es ist wichtig zu beachten , dass ein gültiges Zeichen für eine Basis in der ungültigen Zeichenfolge für eine andere Basis enden kann, wie im folgenden Beispiel.

Beispiel 2: strtol () -Funktion mit verschiedenen Basen

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

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

Die Funktion strtol () ignoriert alle führenden Leerzeichen, bis das primäre Nicht-Leerzeichen gefunden wird.

Im Allgemeinen hat ein gültiges Ganzzahlargument für die Funktion strtol () die folgende Form:

 (Leerzeichen) (- | +) (0 | 0x) (alphanumerische Zeichen)

Ausgehend von diesem Zeichen werden dann so viele Zeichen wie möglich benötigt, um eine gültige Ganzzahldarstellung zu bilden und diese in einen langen int-Wert zu konvertieren. Was nach dem letzten gültigen Zeichen von der Zeichenfolge übrig bleibt, wird ignoriert und hat keine Auswirkung auf das Ergebnis.

Beispiel 3: strtol () -Funktion für führende Leerzeichen und ungültige Konvertierung

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

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

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

Wenn die Basis 0 ist, wird die numerische Basis automatisch anhand des Formats der Zeichenfolge ermittelt. Wenn das Präfix 0 ist, ist die Basis oktal (8). Wenn das Präfix 0x oder 0X ist, ist die Basis hexadezimal (16), andernfalls ist die Basis dezimal (10).

Beispiel 4: Funktion strtol () mit Basis 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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

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

Interessante Beiträge...