2012-04-13 9 views
0

der Operator int() Funktion konvertiert den String in einen intWas ist die Logik hinter diesem Programm?

class mystring 
{ 
    private: 
    chat str[20]; 

    public: 
    operator int()    // i'm assuming this converts a string to an int 
    { 
    int i=0,l,ss=0,k=1; 

    l = strlen(str)-1; 
    while(l>=0) 
    { 
     ss=ss+(str[l]-48)*k; 
     l--; 
     k*=10; 
    } 
    return(ss); 
    } 
} 

int main() 
{ 
    mystring s2("123"); 
    int i=int(s2); 
    cout << endl << "i= "<<i; 
} 

Also, was hinter operator int() die Logik ist? Was ist die 48 da drin? Kann mir jemand den Algorithmus erklären, der hinter der Umwandlung von String in int steht?

+0

Dieses Programm wird nicht kompiliert, reparieren Sie das zuerst. – ildjarn

+0

48 ist der ASCII-Code-Wert für das Zeichen '0' – TJD

+1

Es sollte beachtet werden, dass das nicht gut geschriebenen Code ist, und das "Geheimnis" 48, und das Fehlen von Kommentaren sind das Giveaway. (Auch haben wir stringstream für diese Konvertierung oder Boost) –

Antwort

3

Ja, das konvertiert eine Zeichenfolge in eine ganze Zahl. 48 ist der ASCII-Wert für '0'. Wenn Sie 48 von einer ASCII-Ziffer subtrahieren, erhalten Sie den Wert der Ziffer (zB: '0' - 48 = 0, '1' - 48 = 1, ..). Für jede Ziffer berechnet Ihr Code die korrekte Potenz von 10 unter Verwendung von k (Bereiche zwischen 1 ... 10^{log der Zahl, die durch die Eingabezeichenfolge repräsentiert wird}).

1

Es konvertiert tatsächlich eine Zeichenfolge in eine ganze Zahl. Die Routine geht davon aus, dass alle Zeichen Dezimalstellen sind (Dinge wie Minuszeichen, Leerzeichen oder Komma werden es durcheinander bringen).

Es beginnt mit dem einen Ort und bewegt sich durch die Zeichenfolge. Für jede Ziffer wird der ASCII-Wert '0' subtrahiert und mit dem aktuellen Platzwert multipliziert.

0

Dies konvertiert tatsächlich die Zeichenfolge in eine ganze Zahl. Wenn Sie in einer ASCII-Tabelle schauen beginnen die Zahlen auf dem Wert 48. Mit dieser Logik (und lassen die Zeichenfolge sagen „123“) die while-Schleife tun:

l=2 

ss=0+(51-48)*1 

so in diesem Fall ss = 3

nächste Schleife bekommen wir

l=1 

ss=3+(50-48)*10 

so ss = 23

nächste Schleife

l=0 
ss=23+(49-48)*100 

so ss = 123

Die Schleife bricht und wir geben eine ganze Zahl von Wert 123

Hoffnung, das hilft!

Verwandte Themen