2010-10-04 15 views
7

Hallo Ich weiß, es wurde oft gefragt, aber ich habe keine Antwort auf meine spezifische Frage gefunden.Konvertieren Zeichenfolge in Ganzzahl in C++

Ich mag nur Zeichenfolge konvertieren, die nur Dezimalzahlen enthalten:

Zum Beispiel 256 ist in Ordnung, aber 256a ist es nicht.

Konnte es getan werden, ohne die Zeichenkette zu überprüfen?

Dank

+2

Ihr Betreffzeile sagt "Convert Integer to String", aber Ihre Frage scheint eine String-to-Int-Konvertierung zu implizieren ... Was versuchst du zu tun ?! – EboMike

+1

Dieser Beitrag ist vage und braucht mehr Interpunktion. Kannst du mir erklären, was du mit einem Beispiel meinst? – JoshD

Antwort

14

Der einfachste Weg, die Fehlerprüfung optional macht, dass ich dies denken kann:

char *endptr; 
int x = strtol(str, &endptr, 0); 
int error = (*endptr != '\0'); 
+0

was ist mit 'atoi'? – Alcott

+1

Ich bin kein Fan von 'atoi', da es keine Möglichkeit gibt, den Unterschied zwischen einer vollständig ungültigen Zeichenfolge und einer Zeichenfolge, die gültig ist, zu '0' zu konvertieren –

7

In C++ Weise verwenden stringstream:

#include <iostream> 
#include <string> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    stringstream sstr; 
    int a = -1; 

    sstr << 256 << 'a'; 
    sstr >> a; 

    if (sstr.failbit) 
    { 
     cout << "Either no character was extracted, or the character can't represent a proper value." << endl; 
    } 
    if (sstr.badbit) 
    { 
     cout << "Error on stream.\n"; 
    } 

    cout << "Extracted number " << a << endl; 

    return 0; 
} 
+0

aber was ist, wenn die Zeichenfolge keine Ganzzahl ist? Was wird der Wert von "a" sein? –

+0

@ Jean-FrançoisFabre: Sie können die Stream-Bedingung überprüfen, indem Sie den von 'sstr.rdstate()' zurückgegebenen Status überprüfen oder einzelne Statuswerte überprüfen. Ich habe meine Antwort mit letzterer Option aktualisiert. – Donotalo

6

Eine andere Art und Weise unter Verwendung von C++ - Stil: Wir überprüfen die Anzahl der Ziffern, um zu wissen, ob die Zeichenfolge gültig war oder nicht:

#include <iostream> 
#include <sstream> 
#include <string> 
#include <cmath> 

int main(int argc,char* argv[]) { 

    std::string a("256"); 

    std::istringstream buffer(a); 
    int number; 
    buffer >> number; // OK conversion is done ! 
    // Let's now check if the string was valid ! 
    // Quick way to compute number of digits 
    size_t num_of_digits = (size_t)floor(log10(abs(number))) + 1; 
    if (num_of_digits!=a.length()) { 
     std::cout << "Not a valid string !" << std::endl; 
    } 
    else { 
     std::cout << "Valid conversion to " << number << std::endl; 
    } 

} 
+0

Fehler bei "0", "0001", "-5". – stark

Verwandte Themen