## Einmal Zahl nach String und zurück
-
Wie wandelt man eigentlich eine Zahl in einen String?
Und wie macht man aus einem String eine Zahl?Beide Fragen sollten eigentlich durch diesen Beitrag beantwortet werden:
a) Zahl nach String:
In Standard-C++ hat man drei verschiedene Möglichkeiten um eine Zahl
in einen String umzuwandeln.
Eine genaue Beschreibung der verschiedenen Möglichkeiten samt ihrer Vor- und
Nachteile findet man hier.In Kürze:
---------1. std::ostringstream
#include <sstream> #include <string> #include <iostream> using namespace std; int main() { double d = 3.14; ostringstream Str; Str << d; string ZahlAlsString(Str.str()); cout << ZahlAlsString << endl; }
2. std::ostrstream
#include <strstream> #include <string> #include <iostream> using namespace std; int main() { double d = 3.14; char buffer[10]; ostrstream Str(buffer, 10); Str << d << ends; string ZahlAlsString(Str.str()); cout << ZahlAlsString << endl; }
3. sprintf
#include <stdio.h> #include <stdlib.h> int main() { double d = 3.14; char buffer[10]; sprintf(buffer, "%g", d); printf("%s\n", buffer); system("pause"); }
Zurück gibt es sogar noch mehr verschiedene Wege:
b) String nach Zahl
1. std::stringstream
#include <sstream> #include <string> #include <iostream> using namespace std; int main() { string AlsString("3.14"); stringstream Str; Str << AlsString; double d; Str >> d; cout << d << endl; }
2. std::strstream
#include <strstream> #include <string> #include <iostream> using namespace std; int main() { string AlsString("3.14"); char buffer[10]; strstream Str(buffer, 10); Str << AlsString << ends; double d; Str >> d; cout << d << endl; }
3. atof, atoi, atol
#include <cstdlib> #include <iostream> using namespace std; int main() { const char* AlsString = "3.14"; double d = atof(AlsString); cout << d << endl; }
4. sscanf
#include <cstdio> #include <iostream> using namespace std; int main() { const char* AlsString = "3.14"; float d = 0; // ACHTUNG! sscanf erwartet ein float. Kein double! sscanf(AlsString, "%g", &d); cout << d << endl; }
5. strtod, strtol, strtoul
#include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { string AlsString("3.145"); char* StopPosition = 0; double d = strtod(AlsString.c_str(), &StopPosition); cout << d << endl; }
C++11
#include <string> #include <iostream> using namespace std; int main() { // double -> string { double const d = 0.5; string s = to_string(d); cout << s << endl; } // int -> string { int const i = 10; string s = to_string(i); cout << s << endl; } // string -> int (dezimal) { string const s = "10"; int i = stoi(s); cout << i << endl; } // string -> int (hex) { string const s = "0x10"; int i = stoi(s, nullptr, 16); cout << i << endl; } // string -> double { string const s = "0.5"; double d = stod(s); cout << d << endl; } // Enderkennung { string const s = "10keinezahl"; size_t n; int i = stoi(s, &n); cout << i << endl; if(n != s.size()) { cout << n << " Zeichen als Zahl erkannt. Übrig: '" << s.substr(n) << "'\n"; } } }