可能性のある複製:
C++で文字列をintに解析する方法
私はいくつかの研究を行ってきましたが、何人かの人々はatioを使うと言い、他の人はそれが悪いと言います。
ですから、文字列をintに変換する正しい方法は何なのでしょうか。
string s = "10";
int i = s....?
ありがとう!
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
istringstream を使用できます。
string s = "10";
// create an input stream with your string.
istringstream is(str);
int i;
// use is like an input stream
is >> i;
便利なクイック機能(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>
も必要です。