2017-09-10 2 views
0

Nur versuchen, Zahlen aus einer Zeichenfolge mithilfe von Codeblöcken zu erhalten. Ich weiß nicht, ob Code-Blöcke fehlerhaft sind, weil ich gehört habe, dass es ein Problem gibt, wenn ich die Stoi-Funktion verwende.Kann keine Zahleneingabe von Zeichenfolge erhalten

nur versucht, folgendes zu tun:

String-Eingang;

cin>>input;// user defined such as input="he gave 6 apples " (taking only one number no matter how big) 



int a; 
a=stoi(input);// will be 6 

Antwort

1

Erstens könnten Sie nicht in der Lage sein cin zu verwenden, um eine ganze Zeile zu erhalten. Die Räume sind beunruhigend. Sie sollten stattdessen getline() verwenden.
Zweitens bevorzuge ich int atoi(const char *). code:

#include <iostream> 
#include <string> 
#include <stdlib.h> 
using namespace std; 
int myFunction(string s) 
{ 
    int i; 
    for(i = 0; i < s.length(); i++) 
     if(s[i] >= '0' && s[i] <= '9') 
      break; 
    return atoi(&(s[i])); 
} 
int main() 
{ 
    string s; 
    getline(cin, s); 
    int numFromLine = myFunction(s); 
    cout << numFromLine << endl; 
    return 0; 
} 
+1

Lieber Zeichenliterale anstelle von dezimalem ASCII-Code verwenden. Beispiel: '0' anstelle von 48. –

+0

Ihre Verwendung von 'atoi' gibt nur eine umgewandelte Ziffer zurück. Versuchen Sie es mit 'std :: istringstream' und' std :: getline'. –

+0

Geben Sie auch 'std :: string' als Referenz ein. Die 'Zeichenfolge' ist ein großes Objekt und benötigt viel Platz, wenn eine Kopie erstellt und an die Funktion übergeben wird. Bevorzugen Sie die 'const'-Referenz, wenn die Zeichenfolge nicht geändert wird. –

Verwandte Themen