2017-09-10 9 views
0

コードブロックを使用して文字列から数値を取得しようとしています。コードブロックが誤っているのを知っていません。なぜなら、stoi関数を使用するときに問題があると聞いたからです。ただ、次のやろうとし文字列から数値を取得する

文字列の入力を、

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 

答えて

1

まず、cinを使用して行全体を取得できない場合があります。スペースが邪魔になります。代わりにgetline()を使用してください。
第2に、int atoi(const char *)を使用することをお勧めします。 コード:

#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

10進ASCIIコードではなく文字リテラルを使用することをお勧めします。例:48の代わりに '0'。 –

+0

'atoi'を使用すると、変換された1桁のみが返されます。 'std :: istringstream'と' std :: getline'を使ってみてください。 –

+0

また、参照によって 'std :: string'を渡してください。 'string'は大きなオブジェクトであり、コピーが作成されて関数に渡されるときに多くのスペースを占有します。文字列が変更されていない場合、 'const'参照を優先します。 –

関連する問題