C ++ 11機能にアクセスできる場合は、試してみてくださいstd::stoi(my_string);
そうではないが、Boostライブラリにアクセスできる場合は、次のことを試してください。
std::string str("112211");
int x = 0;
try
{
x = boost::lexical_cast<int>(str);
}
(catch boost::bad_lexical_cast&)
{
}
boost :: lexicalキャストは、内部で使用するために定義されています(少なくとも一般的な場合)istringstream
(をオーバーライドstd::istream& operator>>
するyour_type
と、)でタイプを読み取ることができますlexical_cast<your_type>(string)
。
ブーストするためのアクセス権がない場合は、自分でロールしてください(このスレッドの他の人は、例外をスローするようにiostreamを設定する方法をすでに指摘しています)。
編集:あなた自身を転がす:
template<typename T>
T lexical_cast<T>(const std::string & str)
{
std::istringstream buffer(str);
buffer.exceptions(std::istringstream::failbit);
T retval;
buffer >> retval;
return retval;
}
これは、iostreamioをサポートしない値タイプに特化できます。