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





  • Ich geh mal davon aus, dass du das ganze händisch machen wolltest, ansonsten
    sagt Daniel schon das richtige 🙂

    Zu 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 🙂


Anmelden zum Antworten