Update für C ++ 11
Da der C++11
Standard - String-to-Zahl - Umwandlung und umgekehrt sind in in der Standardbibliothek eingebaut. Alle folgenden Funktionen sind in <string>
(gemäß Absatz 21.5) vorhanden.
Zeichenfolge zu numerisch
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
Jeder von diesen nimmt eine Zeichenfolge als Eingabe und versucht, sie in eine Zahl umzuwandeln. Wenn keine gültige Nummer erstellt werden konnte, z. B. weil keine numerischen Daten vorhanden sind oder die Nummer außerhalb des Bereichs für den Typ liegt, wird eine Ausnahme ausgelöst ( std::invalid_argument
oder std::out_of_range
).
Wenn die Konvertierung erfolgreich war und idx
nicht 0
, idx
enthält sie den Index des ersten Zeichens, das nicht zum Decodieren verwendet wurde. Dies könnte ein Index hinter dem letzten Zeichen sein.
Schließlich ermöglichen die Integraltypen die Angabe einer Basis. Für Ziffern größer als 9 wird das Alphabet angenommen ( a=10
bis z=35
). Weitere Informationen zur genauen Formatierung, die für Gleitkommazahlen , vorzeichenbehaftete Ganzzahlen und vorzeichenlose Ganzzahlen analysiert werden kann, finden Sie hier .
Schließlich gibt es für jede Funktion auch eine Überladung, die a std::wstring
als ersten Parameter akzeptiert .
numerisch zu string
string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);
Diese sind einfacher, Sie übergeben den entsprechenden numerischen Typ und erhalten eine Zeichenfolge zurück. Für Formatierungsoptionen sollten Sie zur Stringsream-Option C ++ 03 zurückkehren und Stream-Manipulatoren verwenden, wie in einer anderen Antwort hier erläutert.
Wie in den Kommentaren erwähnt, greifen diese Funktionen auf eine Standard-Mantissengenauigkeit zurück, die wahrscheinlich nicht die maximale Genauigkeit ist. Wenn für Ihre Anwendung mehr Präzision erforderlich ist, kehren Sie am besten zu anderen Formatierungsverfahren für Zeichenfolgen zurück.
Es sind auch ähnliche Funktionen definiert, die benannt to_wstring
sind. Diese geben a zurück std::wstring
.