Parsen von Zeichenketten in C++
-
Verwendung von die Funktion
std::stoi
zum Parsen einesint
aus einem String -
Verwenden Sie die Funktion
std::from_chars
, um Int von einer Zeichenkette zu parsen
In diesem Artikel werden mehrere Methoden zum Parsen eines int
aus der Zeichenkette
in C++ erläutert.
Verwendung von die Funktion std::stoi
zum Parsen eines int
aus einem String
Die Funktion stoi
ist Teil der Zeichenkettenbibliothek, die im string
-Header definiert ist, und sie kann verwendet werden, um Zeichenkettenwerte in verschiedene numerische Typen zu konvertieren. Die Funktionen std::stoi
, std::stol
und std::stoll
werden für die Konvertierung vorzeichenbehafteter Ganzzahlen verwendet. Die Funktion stoi
nimmt ein einzelnes String
-Objekt als obligatorisches Argument, aber der Programmierer kann auch die Adresse zum Speichern der Ganzzahl und die Zahlenbasis angeben, in der der eingegebene String verarbeitet werden soll.
Das folgende Beispiel demonstriert mehrere Anwendungsfälle der Funktion stoi
. Beachten Sie, daß stoi
mit führenden Leerzeichen in der Zeichenkette umgehen kann, aber jedes andere Zeichen eine std::invalid_argument
-Ausnahme verursacht.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4, nullptr, 2);
num5 = stoi(s5);
num6 = stoi(s6, nullptr, 16);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Ausgabe:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: 333 | num6: 51
Verwenden Sie die Funktion std::from_chars
, um Int von einer Zeichenkette zu parsen
Als Alternative kann die from_chars
-Funktion aus der Utilities-Bibliothek int
-Werte parsen. Sie ist seit der C++17-Version Teil der Standardbibliothek und ist in der <charconv>
Header-Datei definiert.
Ganz anders als die stoi
arbeitet from_chars
mit den Zeichenbereichen, ohne sich der Objektlänge und der Grenzen bewusst zu sein. Daher sollte der Programmierer den Anfang und das Ende des Bereichs als die ersten beiden Argumente angeben. Das dritte Argument ist die Variable int
, der der konvertierte Wert zugewiesen wird.
Beachten Sie jedoch, daß from_chars
nur das führende -
Zeichen in der Eingabezeichenkette verarbeiten kann; daher gibt es im folgenden Beispiel Abfallwerte von num5
und num6
aus.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::from_chars;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
from_chars(s1.c_str(), s1.c_str() + s1.length(), num1);
from_chars(s2.c_str(), s2.c_str() + s2.length(), num2);
from_chars(s3.c_str(), s3.c_str() + s3.length(), num3);
from_chars(s4.c_str(), s4.c_str() + s4.length(), num4, 2);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Ausgabe:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: -1858679306 | num6: 0
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook