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: Yesterday, I joined the summer school at Tsukuba. I could join only one day but i feel it is wonderful to know not knowing.

jm6xxu: VHDLは院生の時に書いたなぁ。簡単なロジックだったけど。最近は、Cからも論理合成できるらしい。RT @habutarou: HDLも大きく2種類あったな。おいらはVHDLを習った。なつかしい… RT @jm6xxu ま、その前にVHDLを思い出さなきゃいけないがな。

jm6xxu: ま、その前にVHDLを思い出さなきゃいけないがな。と思ったら、emacsにverilogモードなんてものがある。debパッケージにもなってるし、Verilogにするか。

jm6xxu: 9月なので本気出す。本格的にFPGAでデバイスを作ることにする。純正ダウンロードケーブルもSuzakuも注文したし、WebPack ISEもダウンロード中。再来週には無料セミナーにも行く。

jm6xxu: 四次元空間はドラえもんのらポケットの中の世界だって? 30点。パイロットは6次元で航空機を制御してる。所詮地ベタて満足してるヤツは自由度がもう一つあるコトを死ぬまで気づかないものさ

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