« カメラが直ったので里親募集 | Home | 続・C++でStringTokenizerっぽいことをやってみる »

June 13, 2009

C++でStringTokenizerっぽいことをやってみる

C++を書いていて、JavaのSttringTokenizerのようなことをやりたいことがある。C++標準ライブラリだけで書いてみた。

void slice(const std::string source, 
	   const std::string dem, 
	   std::vector<std::string> *retval)
{
  std::string::size_type i1 = 0;
  std::string::size_type i2 = source.find(dem);

  if(std::string::npos == i2)
    return;

  std::string s = source + dem;

  do{
    retval->push_back(s.substr(i1, i2-i1));
    i1 = i2+1;
  }while(std::string::npos != (i2 = s.find(dem, i1)));
}

 この関数は、sourceで指定した文字列をdemで指定した文字で切り分けて、切り分けた結果をretvalで指定したヴェクタに格納ものである。テストしてみると。


using namespace std;

int main(void)
{
  string source = 
    "DCV_,___,___,-00.0073E-3,DCV_,___,___,+00.000E-3,6247865";

  vector<string> vec;
  vec.clear();

  slice(source, ",", &vec);
  if(vec.empty()){
    cout<< "not found"<< endl;
    return -1;
  }

  cout<< vec[3]<< " "<< vec[7]<< endl;
  return 0;
}


$ ./a.out
-00.0073E-3 +00.000E-3

 ちゃんと値は切り出せている。listに結果を格納するようにすれば、もっとStringTokenizerっぽくなるかな。

1 TrackBack

TrackBack URL: http://www.argv.org/~chome/blog/mt-tb.cgi/183

 前回の記事のhaveの指摘に従い、参照渡しをやめてヴェクタを返す関数にしてみた... Read More

2 Comments

おぬしも好きだのう。
結果をポインタ引数の指すアドレスに入れるのがC++っぽくない気がするなぁ。
クラス化してないからべつにいいのかな。

つーか、組みたいプログラムを組んでないなぁ、ここ数年。やばい。枯れてしまう。

About this Entry

This page contains a single entry by chomy published on June 13, 2009 5:43 PM.

カメラが直ったので里親募集 was the previous entry in this blog.

続・C++でStringTokenizerっぽいことをやってみる is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.