2017-01-14 2 views
-3

Ich versuche, eine Zeichenfolge, die eine Teilfolge einer Zahl enthält, in eine ganze Zahl zu konvertieren, damit ich mathematische Operationen darauf ausführen kann. Aber ich bekomme immer wieder:Probleme mit stoi

libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion Abort trap: 6

I verwendet cout kurz vor dem Aufruf von Stoi, um zu sehen, was in Artikel war und ich würde eine Zahl ausgegeben bekommen. Zum Beispiel Wenn der sequence war 10, mit n = 2, cout << item; ausgeben würde:

0 
1 
10 

Sobald ich versuche stoi ich Absturz bekommen ein Programm zu verwenden. Hier

ist der Code:

for (int i = 0; i < (1 << n); ++i) 
{ 
    string item; 

    //Determining subsequence 
    for (int j = 0; j < n; ++j) 
    { 
      if (i & (1 << j)) 
      { 
      item.push_back(sequence.at(j)); 
      } 
    } 

cout << stoi(item) << endl; //error occurs here 
} 
+0

Was enthält das 'string item', bevor Sie' stoi (item) 'aufrufen? – Walter

+0

Es kann keine sinnvolle Antwort gegeben werden, ohne mindestens den Eingang zu verwenden, der den Fehler auslöst. Bitte [bitte]. – user4581301

Antwort

1

Die Fehlermeldung sagt Ihnen alles, was Sie wissen müssen: stoi warf std::invalid_argument Ausnahme mit der Meldung „keine Konvertierung“ und diese Ausnahme wurde nicht gefangen, so Programm beendet.

std::stoi kann std::invalid_argument werfen, wenn Sie etwas übergeben, das nicht in Ganzzahl konvertiert werden kann. Fügen Sie try-catch hinzu, um std::exception zu fangen, um einen Absturz zu vermeiden. Geben Sie item in cout aus, um den Wert zu untersuchen, den Sie in Ganzzahl konvertieren möchten.

Sie können den Debugger auch verwenden, um Ihr Programm Schritt für Schritt auszuführen und verschiedene Variablen nach jedem Schritt zu untersuchen. Zu versuchen, zu verstehen, was falsch ist, indem man den Code betrachtet, ist für dein Gehirn nützlich, aber leider nicht sehr effektiv.