*iterator auf string in Int umwandeln



  • Guten Tag, habe eine bescheidene frage wie kann man den Wert(string z.b 110) wo der *iterator drauf zeigt in einen intger umwandeln ?

    grüße



  • Hallo

    So wie jeden String auch. Und wie das geht kannst du in der FAQ hier im C++ Forum nachlesen, im Thread "Einmal String und zurück"

    bis bald
    akari



  • ich gehe mal von aus das du den beitrag von HumeSikkins meinst ,
    dann werd ich da wohl noch etwas falsch machen ok ich schau das nochmal genau an,
    besten dank



  • wenn ich nun aber

    string eingangstr = *iter;
    int eingang = atoi(eingangstr);
    

    nehme,
    melder er mir immer cannot convert string du const char* to int atoi (const char*)(hier in zeile 2)



  • Hallo

    Weil atoi ja auch die alte C-Variante ist, die nur für C-Strings funktioniert :

    string eingangstr = *iter;
    int eingang = atoi(eingangstr.c_str());
    

    Verwende lieber die weiter unten angegebene C++ Variante mit dem std::stringstream.

    bis bald
    akari



  • std::stringstream s;
    s << *iter;
    int eingang = 0;
    s >> eingang;
    

    Oder gleich boost::lexical_cast<T>



  • jepp das klappt gut genau so wie ich es möchte 🙂 nu mal eine adere frage und zwar kann ich das ja sicherlich in eine funktion packen, die den *iter als string empfängt und nach int umwandelt, wie gibt man denn den int wert aus der funkton wieder zurück ?.



  • return value;
    

    ?



  • int cast(std::string const& source)
    {
        std::ostringstream ss(source);
        int value(0);
        ss >> value;
        return value;
    }
    

    =>

    int sample = cast("100000001");
    

    =>

    template <typename destination_type>
    destination_type lexical_cast(std::string const& source)
    {
        std::ostringstream ss(source);
        destination_type value;
        ss >> value;
        return value;
    }
    

    😉



  • (D)Evil schrieb:

    template <typename destination_type>
    destination_type lexical_cast(std::string const& source)
    {
        std::ostringstream ss(source);
        destination_type value;
        ss >> value;
        return value;
    }
    

    knapp daneben.

    template <typename destination_type>
    destination_type lexical_cast(std::string const& source)
    {
        std::istringstream ss(source);
        destination_type value;
        ss >> value;
        return value;
    }
    

    warum aber nicht auch für source ein template verwenden? (oder ganz auf boost::lexical_cast vertrauen?)



  • besten dank hatte anstatt int funktion void funkktion genommen,,,das klappt ja nicht ganz 🙂


Anmelden zum Antworten