String into long Algorithmus
-
Hallo,
ich hab für mein Programm einen Algorithmus zum Konvertieren eines Strings in eine long Variable. Funktioniert aber nur für Zahlen mit maximaler Stellenanzahl von 10.long Rechner::strtolon(string& strZahl) { long ReturnWert = 0; string temp(60,'-'); // String umkehren for(unsigned int z=1;z<=strZahl.length();++z) { temp.at(strZahl.length()-z) = strZahl.at(z-1); } for(unsigned int t=0;t<temp.length();++t) { switch(temp.at(t)) { case '1': { ReturnWert +=(long) pow(10.0,(double)t); }break; case '2': { ReturnWert +=(long)2* pow(10.0,(double)t); }break; case '3': { ReturnWert +=(long)3* pow(10.0,(double)t); }break; case '4': { ReturnWert +=(long)4* pow(10.0,(double)t); }break; case '5': { ReturnWert +=(long)5* pow(10.0,(double)t); }break; case '6': { ReturnWert +=(long)6* pow(10.0,(double)t); }break; case '7': { ReturnWert +=(long)7* pow(10.0,(double)t); }break; case '8': { ReturnWert +=(long)8* pow(10.0,(double)t); }break; case '9': { ReturnWert +=(long)9* pow(10.0,(double)t); }break; default: break; } } return ReturnWert; }
Was könnte ich verbessern?? Danke.
Julian
-
Einfach mal http://www.c-plusplus.net/forum/viewtopic.php?t=39488 lesen?
-
Ich geh mal davon aus, dass du das ganze händisch machen wolltest, ansonsten
sagt Daniel schon das richtigeZu deinem Code
(1) Der Übergabeparameter sollte vom Typ const str& sein
(2) Du speicherst str in temp, nur umgedreht, um dann temp von vorne
nach hinten zu bearbeiten. Ist das nicht n bissl umständlich?
(3) Der switch ist Mist!
(4) Die ganzen casts kannst du dir sparen, die werden implizit autom.
ausgeführt.long strtolon(const string& str) { long result = 0; for(int i = 0; i != str.size(); ++i) if(isdigit(str[i])) result += (str[i] - '0') * pow(10,str.size()-i-1); return str[0] == '-' ? -result : result; }
edit: Dein "Stellenproblem" hat die Ursache in der begrenzten Kapazität von long