2017-03-27 2 views
1

Hier ist mein Code. Ich erstelle ein Programm, das eine String-Eingabe nimmt und es in ein Double konvertiert. Ich muss jedoch bestätigen, dass die Eingabe ein gültiges Double war. Also, wie würde ich darüber gehen? Zum Beispiel wäre 3.14 gültig, aber Dinge wie 3.1.4, bob123 usw. wären nicht gültig.Wie kann ich überprüfen, ob eine Stringeingabe ein gültiges Double ist?

namespace validInput 
{ 
bool IsValidDouble(string inputString) 
{ 
    int start = 0; // the index we will start looking for digits 
    bool valid = true; // assume valid for now 
    int decCount = 0; 

    // check for an empty string 
    if (inputString.length() < 1) 
    { 
     valid = false; // no need to check anything else 
    }   
    // next, check for a leading sign 
    else if (inputString.at(0) == '-'|| inputString.at(0) == '+') 
    { 
     start = 1; // start checking for digits after the sign 

     // check that there's at least one character after the sign 
     if (inputString.length() < 2) 
     {   
     valid = false; // no need to check anything else 
     } 
    } 
     // ***************************************** 
     // CHECK FOR ONLY ONE DECIMAL IN INPUT 
     // ***************************************** 
    return valid; // return true if valid, false if not 
} 

// Taking string, validating, converting to float(decimal) 
double TryDoubleInput() 
{ 
    double dNumber; 
    string inputString; 

    //cin >> inputString; // accept a string input 
    getline(cin, inputString); 
    if (!IsValidDouble(inputString)) 
    { 
     cerr << "Invalid input. Please enter a number: "; 
     dNumber = TryDoubleInput(); 
    } 
    else 
    { 
     dNumber = atof(inputString.c_str()); // convert to an integer 
    } 
    return dNumber; 
} 
} 

Antwort

0

Sie double strtod (const char* str, char** endptr) Bei Erfolg nutzen können, gibt die Funktion die Gleitkomma umgewandelt Zahl als Wert vom Typ double. Wenn keine gültige Konvertierung durchgeführt werden konnte, gibt die Funktion null (0.0) zurück. Wenn der korrekte Wert außerhalb des Bereichs der darstellbaren Werte für den Typ liegt, wird ein positiver oder negativer HUGE_VAL zurückgegeben, und errno wird auf ERANGE gesetzt.

0

Welche Konvertierungsmethode verwenden Sie?

Ich würde lieber den Fehlermechanismus Ihrer Konvertierungsmethode verwenden, egal ob dies eine Ausnahme oder ein Return-Code ist.

N.B. Sie sollten inputString.empty() verwenden, es ist schneller.

+0

Ich habe den Code aktualisiert, um zu zeigen, was passiert, wenn es einen Erfolg/Fehler gibt, wenn Sie das meinen – Avoxy

0

Verwenden Sie strtod oder sscanf("%*lf%n", &n) und sehen Sie, wie viele Zeichen es aus der Eingabezeichenfolge verbraucht hat. Bedenken Sie jedoch, dass ihre Vorstellung von einer gültigen doppelten Repräsentation sich von Ihrer unterscheidet. Zum Beispiel erlauben sie führende Leerzeichen und alles mögliche. Einige zusätzliche Optimierungen sind möglicherweise erforderlich, um Ihre Überprüfung bei Bedarf restriktiver zu gestalten.

Verwandte Themen