2017-11-01 7 views
-4

Ich schreibe in C++ und ich habe eine Zeichenfolge. Ich möchte überprüfen, ob diese Zeichenfolge nur Zahlen ist, und wenn es ist, möchte ich den Typ zu langen int ändern.string mit Zahlen ändern Sie den Typ zu lang int

     stringT = "12836564128606764591"; 
         bool temp = false; 
         for(char& ch : stringT) 
         { 
         if(!isdigit(ch)) 
          { 
          temp=true; 
          break; 
          } 
         } 
         if(temp != true) 
         { 
         itm = new Item_int((long long) strtoll(stringT.c_str(), NULL, 0)); 
         std::cout << " itm:" << *itm << std::endl; 


         } 

aber das Ergebnis von Druck ist: 9223372036854775807

+1

Was genau 'Item_int' ist? – DimChtz

+0

bitte über [MCVE] lesen. Sie den Code hier zeigen Da niemand zu sagen in der Lage, genau, warum Sie diese Ausgabe erhalten.Wenn es nicht relevant ist, können Sie nur die 'Item_int' aus dem Beispiel entfernen – user463035818

Antwort

0

Erste Iterierte über eine Zeichenfolge nicht numerische Zeichen Zeichenfolge

bool is_number(const std::string& s) 
    { 
     std::string::const_iterator it = s.begin(); 
     while (it != s.end() && std::isdigit(*it)) ++it; 
     return !s.empty() && it == s.end(); 
    } 

als konvertieren zu finden in int wenn is_number erfolgreich ist

long int number = 0; 
if (is_number(stringT)) 
{ 
    number = std::stol(stringT); 
} 
+0

Er _is_ bereits iteriert über die Zeichenfolge für die Suche, wenn es nicht-stellige Zeichen gibt .. –

+0

' number = Long.parseLong (stringT); 'Bist du sicher, dass das C++ ist? – DimChtz

+0

Whoops, du hast Recht, dass Java. Bearbeitete meine Antwort. –

0

Die Nummer 12836564128606764591 ist größer als was in eine passen kann long long.

Die maximal ein long long9223372036854775807 wird halten können (long long Annahme, daß 64 Bits.

Verwandte Themen