Tom: C++: aus Interger oder Long einen String machen

Hello,

ich krebse hier mit den Typumwandlungen in C++ rum.

Wie kann ich aus einem long oder einem integer einen String machen?

Wozu gehören die Typumwandlungen in CPP?
Ich habe die Klasse cstdlib in Verdacht, komme aber im Moment an keine Doku...

Mal sehejn, wann dieser Post das Haus verlässt ;-((

Liebe Grüße Dortmund

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de
  1. Hi Tom,

    Wie kann ich aus einem long oder einem integer einen String machen?

    long test=LONG_MAX; //2147483647;
    sprintf(buf,"%i",test);
    printf(buf);

    oder über die ?toa Methoden (itoa, ltoa)

    Grüße,

    Jochen

    --
    Kritzeln statt texten: Scribbleboard
  2. In C++ kann man auch die STL-Klasse ostringstream
    verwenden, mit dem '<<' - Operator alles mögliche
    hineinschieben und das ganze dann in einen string
    umwandeln:

      
    #include<iostream>  
    #include<string>  
    #include<sstream>  
      
    using namespace std;  
    int main(void) {  
            ostringstream os;  
            int i(17);  
      
            os << i << " + " << i << " = " << i+i << endl;  
      
            string s(os.str());  
            cout << s;  
      
            return 0;  
    }  
      
    
    

    MfG

    Andreas

    1. Hello Andreas,

      In C++ kann man auch die STL-Klasse ostringstream
      verwenden, mit dem '<<' - Operator alles mögliche
      hineinschieben und das ganze dann in einen string
      umwandeln:

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

      using namespace std;
      int main(void) {
              ostringstream os;
              int i(17);

      os << i << " + " << i << " = " << i+i << endl;

      string s(os.str());
              cout << s;

      return 0;
      }

        
      Danke für die Tipps.  
      Ich hatte in 'unserem' Buch "C++ von A-Z" noch etwas gefunden, eigentlich anders herum, aber habe daraus dann meine Versuche abgeleitet und eine Funktion/Methode erstellt...  
        
      Beispiel:  
        
        
      #include <iostream>  
      #include <sstream>  
      #include <iomanip>  
        
      using namespace std;  
        
      // ...  
        
      string laufzeittext(long laufzeit)  
      {  
          int stunde;  
          int minute;  
          int sekunde;  
          int rest;  
        
          stringstream ausgabestream;  
          string ausgabe = "";  
        
          stunde = laufzeit / 3600;  
          rest = laufzeit - stunde \* 3600;  
          minute = rest / 60;  
          rest = rest - minute \* 60;  
          sekunde = rest;  
        
          ausgabestream << fill('0') << setw(2) << stunde << ":"  
                        << fill('0') << setw(2) << minute << ":"  
                        << fill('0') << setw(2) << sekunde;  
        
          ausgabestream >> ausgabe;  
        
          return ausgabe;  
      }  
        
        
      Das Beispiel ist in dieser Form entstanden, weil ich einen Mitschüler hier sitzen habe, der mit meiner Hilfe erstmal das Programmieren lernt. Dafür muss er C++ verwenden, wobei sich das z.Zt. hauptsächlich noch im C-Bereich bewegt. Ich kann dann gelegentlich in die Übungen mal meine Fragestellungen einbauen und üblicherweise sollte sie mir unser Dozent dann auch beantworten können... Immer klappt das leider auch nicht aus dem Handgelenk.  
      (Eine Woche müssen wir noch mit "slack joint net" zurecht kommen, dann gibts hoffentlich eine neue Anbindung mit Power)  
        
      Ist das so überhaupt ok? (es geht nur um die Konvertierung, nicht um die Zeitrechnung!)  
        
        
      Was mich beim Besipiel irritiert:  
        
      Wie legt C++ den String fest, der ausgegeben wird? Wird der auf dem heap angelegt und nur ein Zeiger darauf übergeben?  
        
      Außerdem hat die Formatierung mittels der IOManip-Filter setw(2) nicht funktioniert. Da wurde der gesamte String auf 2 Zeichen beschränkt. Er muss abgeschnitten worden sein. Erst nachdem ich fill('0') hinzugefügt habe, hat es erwartungsgemäß funktioniert ( 00:43:13 ). Woran kann das liegen?  
        
      Der Kollege verwendet Dev-C++ 4.9.9.2  
        
      Ich habe eclipse 3.4.x aber das habe ich vorhin zum Abschmieren getrieben. Nun muss ich erstmal wieder neu installieren ;-O  
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      }  
        
        
        
        
      Liebe Grüße aus Syburg bei Dortmund  
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
      Nur selber lernen macht schlau  
      <http://bergpost.annerschbarrich.de>
      
      1. hi!

        Ist das so überhaupt ok? (es geht nur um die Konvertierung, nicht um die
        Zeitrechnung!)

        Deine Variable "ausgabe" brauchst du nicht, sondern kannst stattdessen
        am Ende der Funktion gleich "return ausgabestream.str()" schreiben.

        Wie legt C++ den String fest, der ausgegeben wird? Wird der auf dem heap
        angelegt und nur ein Zeiger darauf übergeben?

        Das ist fuer dich unerheblich, was ja gerade einer der grossen Vorteile
        von C++-Strings im Vergleich zu C-Strings sind. Aber du kannst davon
        ausgehen, dass der String intern auf dem Heap angelegt wird, da die Laenge
        ja zur Compile-Zeit nicht bekannt ist.

        Außerdem hat die Formatierung mittels der IOManip-Filter setw(2) nicht
        funktioniert. Da wurde der gesamte String auf 2 Zeichen beschränkt. Er
        muss abgeschnitten worden sein. Erst nachdem ich fill('0') hinzugefügt
        habe, hat es erwartungsgemäß funktioniert ( 00:43:13 ). Woran kann das
        liegen?

        Das kommt mir komisch vor. setw() legt die minimale Laenge der naechsten
        Einfuegung in den Stream fest. fill() gibt es so gar nicht, wie du es in
        deinem Code angegeben hast. Entweder musst du setfill() an der Stelle
        verwenden, oder vorher bereits cout.fill(). Damit legt man das Zeichen fest,
        mit dem der Stream gefuellt wird, um die angegebene Laenge zu erreichen.

        Wenn das bei dir anders funktioniert, solltest du mal ein funktionierendes
        Beispiel angeben, das den von dir beschriebenen Effekt zeigt.

        bye, Frank!

        --
        Never argue with an idiot. He will lower you to his level and then
        beat you with experience.
        1. Hello,

          Das kommt mir komisch vor. setw() legt die minimale Laenge der naechsten
          Einfuegung in den Stream fest. fill() gibt es so gar nicht, wie du es in
          deinem Code angegeben hast. Entweder musst du setfill() an der Stelle
          verwenden, oder vorher bereits cout.fill(). Damit legt man das Zeichen fest,

          habe ich aber definitiv nicht, aber es wurde richtig aufgefüllt.

          mit dem der Stream gefuellt wird, um die angegebene Laenge zu erreichen.

          Das werde ich nochmal untersuchen.

          Es wird gcc von mingw (5.1.4) benutzt unter eclipse IDE.
          Da kam unserem Dozenten schon einiges ulkig vor bezüglich der includes, die eigentlich notwendig gewesen wären für Stings für einige Operationen und trotz Nichtvorhandenseins nicht zu einem Fehler geführt haben...

          Dauert aber mindestens bis morgen.

          Liebe Grüße aus Syburg bei Dortmund

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de