Wie konvertiert man Zeichenkette nach Int in C++
-
Verwendung von die Methode
std::stoi
zur Konvertierung von String nach Int in C++ -
Verwenden Sie die Methode
std::from_chars
, um Zeichenkette in C++ in Int zu konvertieren
Dieser Artikel stellt mehrere Methoden zur Konvertierung von string
nach int
in C++ vor.
Verwendung von die Methode std::stoi
zur Konvertierung von String nach Int in C++
Die Methode stoi
ist ein eingebautes string
-Container-Feature zur Umwandlung in eine vorzeichenbehaftete Ganzzahl. Die Methode nimmt einen obligatorischen Parameter vom Typ string
zur Bearbeitung an. Wir könnten auch einige optionale Parameter wie die Startposition in der Zeichenkette und die Zahlenbasis übergeben. Das folgende Code-Beispiel demonstriert Szenarien mit mehrfacher Eingabe von string
und entsprechende stoi
Anwendungsfälle.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::stoi;
int main() {
string s1 = "123";
string s2 = "-123";
string s3 = "123xyz";
string s4 = "-123xyz";
string s5 = "7B";
string s6 = "-7B";
string s7 = "1111011";
string s8 = "-1111011";
int num1, num2, num3, num4, num5, num6, num7, num8;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4);
num5 = stoi(s5, nullptr, 16);
num6 = stoi(s6, nullptr, 16);
num7 = stoi(s7, nullptr, 2);
num8 = stoi(s8, nullptr, 2);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
cout << "num7: " << num7 << " | num8: " << num8 << endl;
return EXIT_SUCCESS;
}
Ausgabe:
num1: 123 | num2: -123
num3: 123 | num4: -123
num5: 123 | num6: -123
num7: 123 | num8: -123
Beachten Sie, daß stoi
führende Whitespace-Zeichen, +/-
Zeichen, hexadezimale Präfixe (0x
oder 0X
), sogar mehrere Nullen verarbeiten kann und die Ganzzahl korrekt zurückgibt. Es kann nicht mit anderen Zeichen vor den Ziffern umgehen, und wenn es eines findet, wird die Ausnahme std::invalid_argument
geworfen. Sie können sich das Verhalten anhand des folgenden Code-Beispiels ansehen:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::stoi;
int main() {
string s1 = " 123";
;
string s2 = "xyz123";
;
int num1, num2;
num1 = stoi(s1);
cout << "num1: " << num1 << endl;
try {
num2 = stoi(s2);
cout << "num2: " << num2 << endl;
} catch (std::exception& e) {
cout << e.what() << " caused the error!!!\n";
}
return EXIT_SUCCESS;
}
Ausgabe:
num1: 123
stoi caused the error!!!
Es gibt mehrere Methoden im Stil von stoi
zur Konvertierung in verschiedene Zahlentypen wie std::stoi, std::stol, std::stoll
, std::stoul, std::stoull
, std::stof, std::stod, std::stold
, die bei Bedarf zur Implementierung spezifischer Funktionalität verwendet werden können.
Verwenden Sie die Methode std::from_chars
, um Zeichenkette in C++ in Int zu konvertieren
Die from_chars
-Methode ist ein C++17-Zusatz zur utilities
-Bibliothek, definiert in der <charconv>
-Header-Datei. Sie kann Zeichenketten mit bestimmten Mustern analysieren. Der Vorteil davon ist eine viel schnellere Verarbeitungszeit und eine bessere Behandlung von Ausnahmen in fehlgeschlagenen Parsing-Fällen. Obwohl es einige Einschränkungen für die Eingabezeichenkette gibt, nämlich: führende Leerzeichen/andere Zeichen, können selbst Präfixe zur Basis 16 0x
/0X
nicht behandelt werden. Bei vorzeichenbehafteten Ganzzahlen wird nur das führende Minuszeichen erkannt.
Syntax von std::from_chars
from_chars(const char* first, const char* last, TYPE& value, int base = 10)
Parameter | Beschreibung |
---|---|
[first, last) |
Zeichen-Adressbereich zum Parsen |
value |
die Variable des geparsten Ergebnisses bei Erfolg |
base |
int Basis. Die Voreinstellung ist 10 . |
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl using std::string;
using std::from_chars;
using std::stoi;
int main() {
string s1 = "123";
string s2 = "-123";
string s3 = "123xyz";
string s4 = "-123xyz";
string s5 = "7B";
string s6 = "-7B";
string s7 = "1111011";
string s8 = "-1111011";
string s9 = " 123";
string s10 = "x123";
int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10;
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);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5, 16);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6, 16);
from_chars(s7.c_str(), s7.c_str() + s7.length(), num7, 2);
from_chars(s8.c_str(), s8.c_str() + s8.length(), num8, 2);
from_chars(s9.c_str(), s9.c_str() + s9.length(), num9);
from_chars(s10.c_str(), s10.c_str() + s10.length(), num10);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
cout << "num7: " << num7 << " | num8: " << num8 << endl;
cout << "num9: " << num9 << " | num10: " << num10 << endl;
return EXIT_SUCCESS;
}
Ausgabe:
num1: 123 | num2: -123
num3: 123 | num4: -123
num5: 123 | num6: -123
num7: 123 | num8: -123
num9: -16777216 | num10: -1 // incorrect values varying over runs
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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++