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