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

| | Comments (2) | TrackBacks (1)

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っぽくなるかな。

Categories

1 TrackBacks

Listed below are links to blogs that reference this entry: C++でStringTokenizerっぽいことをやってみる.

TrackBack URL for this entry: http://www.argv.org/~chome/blog/mt-tb.cgi/76

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

2 Comments

Have said:

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

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

chomy Author Profile Page said:

 実はこのコードは、学部生のときに初めて書いたもの。今回測定器からの出力から値を取るためにまた書いたので、メモ代わりにネタにしました。なんか何年かに一回は同じようなコードを書いている気がするし。

 参照渡しはダメ?ヴェクタを返す関数にすべきかな?
そうするとアトミックになるのでマルチスレッドでも安全に使えようになるね。メモリ効率はわずかに落ちるけど、利点はこれを補ってあまりある。すばらしい。

About Me

中尾 圭佐(chomy)
千葉県船橋市在住のモノクロ写真に目覚めた研究者。
Twitter ID: jm6xxu
Skype: chomy

My Tweets

jm6xxu: 今日は朝7:30から仕事を始め、午後から夜まで都内で会議。その後途中で呑んで、現在帰宅中。抽選から漏れた本を、当選者の方に譲っていただける事になったし、自分の仕事は一切できなかったが、良い一日だった。

jm6xxu: @atelieraterui @jm6xxu 最近は忙しくてなかなか出れませんが、ときどき移動で7,21,50,144,430MHzに出ています。聞こえていたらよろしくお願いします。

jm6xxu: @atelieraterui 本当ですか!ありがとうございます。のちほど送付先を連絡させていただきます。

jm6xxu: @mehori 了解しました。当選した場合、一括してお引き受けいたします。Google Docで論文まで書かれるということで、そこまで使えるようになりましたか。私もそろそろAnnual Reportを書かなければならないので、試してみることにします。

jm6xxu: @mehori Making TeX Work ください。TeXを廃止されて次は何を使われるのですか?

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.

Powered by Movable Type 4.261