2016-04-06 16 views
-3

Diese MethodeKann jemand diesen Code Zeile für Zeile erklären?

bool isNumber(string input) 
{ 
    char* p; 

    strtod(input.c_str(), &p); 
    return *p == 0; 
} 

sollte einen String-Eingang und wandelt es in ein Doppelzimmer. Aber ich verstehe den Prozess nicht. Kann mir das jemand Zeile für Zeile ausführlich erklären? Und sollte sich bool nicht auch auf double ändern, da es keinen wahren oder falschen Wert zurückgibt? Vielen Dank.

+1

Diese Funktion wird nicht in double konvertiert, sondern es wird geprüft, ob die eingegebene Zeichenfolge zu einem Double konvertierbar ist. 'strtod' wandelt eine Zeichenkette in eine doppelte um. [Referenz] (http://www.cplusplus.com/reference/cstdlib/strtod/) – LukeG

+0

[Es ist ziemlich gut in der Referenzdokumentation erklärt] (http://en.cppreference.com/w/cpp/string/byte/strtof). –

+0

Wie ist dieser Fragetitel für zukünftige Forscher hilfreich? Was verstehst du nicht besonders? Stellen Sie bitte klarere Fragen bitte! Vielleicht möchten Sie lesen [So stellen Sie gute Fragen] (http://stackoverflow.com/help/how-to-ask). –

Antwort

5

strtod versucht, die Zeichenfolge in eine double zu konvertieren. Außerdem wird der Parameter so eingestellt, dass er auf die Position verweist, an der die Konvertierung beendet wurde.

Wenn die Konvertierung alle Zeichen in der Zeichenfolge verwendet - wenn sie alle Teil einer Reihe waren - der Zeiger p zum '\0' Terminator des Strings verweisen.

Also, return *p == 0, oder besser return *p == '\0', sagt uns, ob wir das Ende der Zeichenfolge erreicht haben. Und natürlich gibt == ein bool Ergebnis zurück.

+0

Und da der erste Parameter von strtod() ein 'const char *' und kein 'std :: string' ist, wird der "rohe" Zeiger des Strings über 'input.c_str()' abgerufen. Der Parameter sollte (zumindest) auch als const markiert sein. – VolkerK

Verwandte Themen