役立たずのプログラマーブログ

自分の得た知識や経験をブログに書くことで整理し、考えをまとめることが目標

C++でsplit関数

2008-01-15 21:36:10 | プログラム
C++のsplit関数はデフォルトではないので、
作るか、boostのものを使うかってことになる。

SnapDragonさんのsplit関数。たしかこんなんだったと思う。
C++クックブックのものよりもずっとイカス。
typedef vector<string> VS;
VS split( string s, string c )
{
	VS ret;
	for( int i=0, n; i <= s.length(); i=n+1 ){
n = s.find_first_of( c, i ); if( n == string::npos ) n = s.length(); string tmp = s.substr( i, n-i ); ret.push_back(tmp); } return ret; }

boostを使うと
#include <boost/algorithm/string.hpp>
string str1("hello abc-*-ABC-*-aBc goodbye");
vector<string> SplitVec;
split( SplitVec, str1, is_any_of("-*") ); // SplitVec == { "hello abc","ABC","aBc goodbye" }

is_any_ofは関数テンプレート。引数が区切り文字ならtrueを返す。

ネットでググったら出てきたsplitのしかた。
スペース区切りのものならこれでいいかも。
string Str = "alex delia john";
std::istringstream iss( Str );
std::vector<string> vec( (std::istream_iterator<string>(iss)),
                          std::istream_iterator<string>() );

vector<string> vec( begin, end)ってことで一つ。

<>が消えていたので修正。

最新の画像もっと見る