Wie konvertiert man Zeichenkette nach Int in C++

Jinku Hu 12 Oktober 2023
  1. Verwendung von die Methode std::stoi zur Konvertierung von String nach Int in C++
  2. Verwenden Sie die Methode std::from_chars, um Zeichenkette in C++ in Int zu konvertieren
Wie konvertiert man Zeichenkette nach Int in C++

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C++ String

Verwandter Artikel - C++ Integer