web-dev-qa-db-ja.com

C ++は文字列からintを解析します

可能性のある複製:
C++で文字列をintに解析する方法

私はいくつかの研究を行ってきましたが、何人かの人々はatioを使うと言い、他の人はそれが悪いと言います。

ですから、文字列をintに変換する正しい方法は何なのでしょうか。

string s = "10";
int i = s....?

ありがとう!

74
kralco626

boost :: lexical_cast :を使用できます

#include <iostream>
#include <boost/lexical_cast.hpp>

int main( int argc, char* argv[] ){
std::string s1 = "10";
std::string s2 = "abc";
int i;

   try   {
      i = boost::lexical_cast<int>( s1 );
   }
   catch( boost::bad_lexical_cast & e ){
      std::cout << "Exception caught : " << e.what() << std::endl;
   }

   try   {
      i = boost::lexical_cast<int>( s2 );
   }
   catch( boost::bad_lexical_cast & e ){
      std::cout << "Exception caught : " << e.what() << std::endl;
   }

   return 0;
}

「正しい方法」はありません。普遍的な(ただし次善の)ソリューションが必要な場合は、boost :: lexicalキャストを使用できます。

C++の一般的な解決策は、std :: ostreamおよび<<演算子を使用することです。文字列への変換には、stringstreamおよびstringstream :: str()メソッドを使用できます。

本当に速いメカニズムが必要な場合(20/80ルールを思い出してください) http://www.partow.net/programming/strtk/index.html のような「専用」ソリューションを探すことができます。

宜しくお願いします、
Marcin

9
Marcin

istringstream を使用できます。

string s = "10";

// create an input stream with your string.
istringstream is(str);

int i;
// use is like an input stream
is >> i;
7
Sanjit Saluja

便利なクイック機能(Boostを使用していない場合):

template<typename T>
std::string ToString(const T& v)
{
    std::ostringstream ss;
    ss << v;
    return ss.str();
}

template<typename T>
T FromString(const std::string& str)
{
    std::istringstream ss(str);
    T ret;
    ss >> ret;
    return ret;
}

例:

int i = FromString<int>(s);
std::string str = ToString(i);

任意のストリーミング可能なタイプ(フロートなど)で機能します。 #include <sstream>およびおそらく#include <string>も必要です。

4
AshleysBrain