## 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";
        }
      }
    }
    

Log in to reply