Zahlen umwandeln

Text in Zahlen umwandeln? C++11 macht's einfach.

Video

Quelltext

#include <iostream>
#include <string>
#include <sstream>

int main()
{
  std::istringstream is("12345");
  int x;
  is >> x;
  std::cout << x << std::endl;
  
  int x1 = std::stoi("12345");
  std::cout << x1 << std::endl;
  
  int x2 = std::stoi("1a45", nullptr, 16);
  std::cout << std::hex << x2 << ", " << std::dec << x2 << std::endl;
  
  std::size_t end;
  auto s = "12345 Extra stuff!";
  int x3 =  std::stoi(s, &end);
  std::cout << x3 << std::endl;
  std::cout << "Außerdem: \"" << (s+end) << "\"\n";
}

Erklärung

Vor C++11 war für das Umwandeln eines Strings in eine Zahl meist der Umweg Weg über std::istringstream nötig. Ab C++11 stellt der Header <string> einige Hilfsfunktionen bereit, die das ganze deutlich vereinfachen. stoi und anverwandte Funktionen nehmen einen String und liefern den dadurch repräsentierten Zahlenwert zurück. Dabei sind sie recht flexibel: einerseits kann man die Basis anpassen und so beispielsweise Hexadezimalzahlen und ähnliches umwandeln. Andererseits bieten sie auch eine Möglichkeit, nur Teile eines Strings zu parsen. Dazu kann man den Funktionen einen Pointer auf eine Variable vom Typ std::size_t übergeben. In diese schreiben sie dann den Offset, ab dem nicht mehr weitergeparst werden konnte, weil das entsprechende Zeichen in der gewählten Zahlendarstellung nicht vorkommt. So kann man bspw. Zeilennummern einer Fehlermeldung parsen und gleich noch rausbekommen, wo die eigentliche Meldung losgeht (natürlich unter der Annahme, dass die Zeilennummer das allererste der Fehlermeldung ist).