C++標準での文字列<=>数値変換
boost::lexical_cast と同等の処理をC++標準で実現する。
ただしエラーは考慮しない。
・ジェネリック版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <sstream> template < typename T> T LexicalCast( char const * src) { std::istringstream is(src); T x; is >> x; return x; } template < typename T> T LexicalCast(std::string const & src) { return LexicalCast<T>(src.c_str()); } template < typename T, typename U> T LexicalCast(U src) { std::ostringstream os; os << src; return os.str(); } #define INT(a) LexicalCast<int>(a) #define STR(a) LexicalCast<std::string>(a) |
・省コード版
1 2 3 4 5 6 | #include <sstream> int INT (std::string src) { std::istringstream is(src); int x; is >> x; return x; } template < typename T> std::string STR(T src) { std::ostringstream os; os << src; return os.str(); } |
・使用例
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> #include <algorithm> using namespace std; int main() { cout << INT ( "01234" ) << endl; // 1234 string s = STR(56789); reverse(s.begin(), s.end()); cout << s << endl; // 98765 cout << INT (s) + 1 << endl; // 98766 cout << STR(0)[0] << STR(9)[0] << endl; // 09 return 0; } |
0 件のコメント:
コメントを投稿