itoa funktioniert nicht...



  • Moin,

    Ich habe Probleme die Funktion itoa() zum Umwandeln von Integer Werten in Strings zu verwenden.

    Mein Code ist Folgender:

    #include <iostream>
    #include <string>
    using namespace std;
    
    string dotos(double zahl)
    {
    	int temp;
    	string temp2;
    	temp = static_cast<int>(zahl);
       itoa(temp,temp2.c_str(),10);
    
    	return 0;
    }
    

    (int main() hab ich weggelassen, da es nichts mit dem problem zu tun hat)

    Es geht um die Zeile "itoa(temp,temp2.c_str(),10);".
    Dort soll der in Wert aus temp in einen string umgewandelt werden, was leider nicht klappt, sondern mit folgender Fehlermeldung endet.

    -------------------Konfiguration: haupt - Win32 Debug--------------------
    Kompilierung läuft...
    haupt.cpp
    C:\Dokumente und Einstellungen\Daniel\Eigene Dateien\Programmierung\C++\test2\haupt.cpp(10) : error C2664: 'itoa' : Konvertierung des Parameters 2 von 'const char *' in 'char *' nicht moeglich
    Durch die Konvertierung gehen Qualifizierer verloren
    Fehler beim Ausführen von cl.exe.

    haupt.exe - 1 Fehler, 0 Warnung(en)

    -> wie kann ich diesen Fehler beheben bzw. was mache ich falsch?

    Danke schonmal im Voraus



  • verbesser das, was der compiler dir als fehler vorgibt ^^
    du musst casten 😉

    ich würde dir aber zu std::stringstream aus der <sstream> raten 😉



  • Wenn du schon im MFC-Forum bist, warum nimmst du dann nicht die Klasse CString?

    int temp=1234;
    CString Ausgabe;
    Ausgabe.Format("%i",temp);
    

    Aber du willst doch einen Double umwandeln oder seh ich das falsch?



  • std::string::c_str() gibt aus gutem Grund einen "const char*" zurück - der String will nämlich gerne die Kontrolle darüber behalten, wie seine Daten behandelt werden müssen. Wenn du schon mit C++-Methoden arbeiten willst, dann bitte auch richtig:

    string dotos(double zahl)
    {
      int temp = zahl;
      istringstream conv;
      conv<<temp;
      return conv.str();
    }
    

    (btw, wenn du den übergebenen Wert sowieso als Ganzzahl ausgeben willst, warum übernimmst du dann einen double?)



  • Ich übergebe desshalb einen double, weil ich eine Funktion schreiben möchte, die double in string umwandelt.



  • Don Quijote schrieb:

    Ich übergebe desshalb einen double, weil ich eine Funktion schreiben möchte, die double in string umwandelt.

    Wenn du einen 'double' in String umwandeln willst, warum quetscht du ihn dann als erstes in einen 'int'? (abgesehen davon, daß du damit die Nachkomma-Stellen abschneidest, ist der Wertebereich von double um einiges größer als der von int)

    PS: In der C++ FAQ findest du einen Thread "einmal Zahl nach String und zurück" - den solltest du mal überfliegen.



  • Für meine Vorgehensweise, war dies zunächst notwendig. Ich hab die idee aber mittlerweile verworfen.

    Ich muss nur noch wissen, wie ich verhindern kann, dass double werte bei der Ausgabe gerundet werden. Es sollen alle nachkommastellen ausgegeben werden.

    Kennt da jemand eine funktion?

    Danke schonmal

    Don Quijote



  • zwar ein bisschen spät aber:

    std::setprecision(eine_zahl_wie_ausgegeben_werden_soll);


Anmelden zum Antworten