Frage zu atoi()
-
Hallo,
Ich habe einen String in dem Zahlen stehen (Σ ={0...9}).
Diese will ich wie folgt errechnen:int p; string P = "123"; for(string::iterator p_iter = P.begin();p_iter != P.end();++p_iter) p = p + atoi(p_iter) * pow(base,(p_iter-P.begin()));mein Problem ist: Ich will nicht 123 haben sondern erst 1 dann 2... usw.
atoi braucht ein const char*, wie in meinem Beispiel. Aber ich will ja nur die erste Zahl haben. Wenn ich den Iterator dereferenziere bekomme ich den Char auf den er zeigt, aber das will atoi() wieder nicht machen. Ich kann auch keine Leerzeichen zwischen den Zahlen einfügen!
Geht das irgendwie elegant mit dem Iterator? Ich würde es nämlich gerne bei einer Zeile belassen...also nicht so
for(string::iterator p_iter = P.begin();p_iter != P.end();++p_iter) { char a = *p_iter; p = p + atoi(&a) * pow(base,(p_iter-P.begin())); }danke im voRaus
grüße
-
Warum so umständlich? Du könntest den String doch in einem Rutsch durch "p=atoi(P.c_str());" umwandeln.
(und wenn du das wirklich von Hand machen willst - mit "*p_iter-'0'" bekommst du den Zahlenwert der aktuellen Ziffer)
-
Das mit *p_iter - '0' ist gut...

CStoll schrieb:
Warum so umständlich? Du könntest den String doch in einem Rutsch durch "p=atoi(P.c_str());" umwandeln.
Nee, das geht nicht, dann hab ich ja 123 und ich muss die 1, 2, 3 seperat zusammenrechnen. Erste Zahl zu 10*0 zweite 10*1... usw.
vielen Dank!
-
Ich meinte nicht, in der Schleife jedes Mal atoi() aufzurufen, sondern ANSTELLE der Schleife die Umrechnung von atoi durchführen zu lassen.
-
template<typename TargetType, typename StringType> TargetType lexical_cast(StringType const& str) { std::basic_istringstream<typename StringType::value_type> stream(str); TargetType trg; stream >> trg; return trg; }string str="123"; int num = lexical_cast<int>(str);