int to string



  • hallo forum!
    Ich hätt ein paar Fragen zu dem Thema integer-Variablen in einen string-Variablen umwandeln.
    Und war:
    1. gibt es eine Funktion, die das macht, wenn ja, wie heißt sie?
    2. wenn es sie nicht gibt, was ist an meiner version schlecht und sollte verbessert werden?

    std::string itoc(int i)    
    {
     C_stack stack;         
     stack.Create();        
    
     char a;
     std::string s;
    
     while(i%10 != 0)        
     {
      a = (i%10)+48;         
      s = a;                 
      stack.Push(s);         
      i = i/10;
     }
    
     s = "";                
    
     while(!stack.Empty())  
     {
      s = s + stack.Pop();  
     }
    
     return s;              
    }
    

    schon mal danke im voraus



  • Wir wäre es mit einem

    std::string itoc(int i)
    {
      std::stringstream s;
      s << i;
      return s.str();
    }
    

    Wenn's auch ne externe lib sein darf ist boost::lexical_cast prima.

    int i = 5;
    std::string text = lexical_cast<string>(i);
    

    das macht im wesentlichen das gleiche, ist aber als template implementiert und Du kannst so zwischen bel. Typen konvertieren, die << bzw. >> unterstützen.



  • _itoa oder _itow
    in stdlib.h



  • dachte, die seien nicht im Standard? Das _ am Anfang deutet auch irgendwie darauf hin. In C++ auch eher <cstdlib>

    MfG Jester



  • _itoa und _itow sind windows-spezifisch. MKS definiert eine Funktion itoa, aber das ist auch eine eher windige UNIX-Erweiterung. Der Standard liefert andere Mittel, unter anderem auch, weil in diesem Fall eine sinnvolle Fehlerbehandlung möglich sein muss. In C++ benutzt man stringstream:

    #include <sstream>
    #include <string>
    
    std::stringstream sstr;
    
    sstr << 123;
    
    std::string s = sstr.str();
    

    In C würde man wohl snprintf benutzen:

    #include <stdio.h>
    
    /* ... */
    
    char buf[100];
    snprintf(buf, 100, "%d", 123);
    

    ...woraus sich natürlich leicht eine entsprechende int2string-Funktion bauen lässt. Für C++ ist das oben schon gemacht worden, wobei ich wohl eher

    template<typename t> std::string to_string(t const &x) {
      std::stringstream sstr;
      sstr << x;
      return sstr.str();
    }
    

    geschrieben hätte. In C, schreib halt

    char *int2string(int x, char *buf, size_t buflen) {
      snprintf(buf, buflen, "%d", x);
      return buf;
    }
    

Anmelden zum Antworten