C 文字列操作 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文字列の検索と置換)
(文字列の検索と置換)
4,041行: 4,041行:
 
リン★とミカ★/ナ★とモ★,ごは★やおか★/おさ★もつま★,progra★と技術
 
リン★とミカ★/ナ★とモ★,ごは★やおか★/おさ★もつま★,progra★と技術
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
149行目以降に記述した部分一致からのプログラムはやや複雑な表記になっていますが、これはICUに準備された関数だけでは部分一致の処理ができないために自分で工夫をしなければならないことに起因しています。
 +
 +
 +
169行目のtypedef関数は宣言を置き換えるための命令文になります。std::pair<int32_t,int32_t>というクラス定義をrange_typeに置き換えるということを意味しています。
 +
またpairの後ろにある<int32_t,int32_t>というのはpairというクラスがテンプレートクラスとして準備されていて、二つの型名を引数にとる必要がありここではint32_tという型を2つ指定して、pairというテンプレートクラスで使う2つの型はどちらもint型で使いますというテンプレートクラスの利用方法を記述している部分になります。pairクラスは2つの変数を対にして記憶するためのクラスになっています。
 +
 +
 +
170行目のvectorという関数もテンプレートクラスになっていて、要するにstd::vector< std::pair<int32_t,int32_t> >という宣言をしたのと同じことで、vectorクラスはstd::pair<int32_t,int32_t>という型で使いますという準備をした上でその変数として、matchesというものを使うという定義になります。vecotrは動的にメモリを確保するのを支援してくれるクラスで、push_backという関数の引数にstd::pair<int32_t,int32_t>(int型の数値,int型の数値)というコンストラクタによって返されるポインタを記録しています。引数には検索した文字の開始位置と終了位置を入れています。vectorのbackという関数で最後に格納したポインタを返してくれるので、range_typeつまりstd::pair<int32_t,int32_t>型のrangeというポインタ変数にコピーしています。std::pairのメンバ変数firstにコンストラクタで使用した一つ目引数の数値が取得でき、メンバ変数secondで二つ目の引数の数値が取得できます。vecotorクラスのpop_back()という関数の呼び出しによって最後に格納したポインタを消すという処理をしてくれます。こうやってfind()で検索するすべての検索位置をvectorクラスの中にpairクラスでセットした2つのint型整数で検索された文字の開始位置と終了位置を記憶する仕組みです。テンプレートクラスとクラスについて理解する必要があります。vectorのempty()関数は格納されたものが無くなったらtrueを返す関数で、while文のループ条件として!matches.empty()のようにして、空っぽではないあいだ繰り返すという処理になっています。
 +
 +
 +
部分一致の処理は難しいので、typedef関数とクラスとクラス コピーコンストラクタとテンプレートクラスとクラスのメンバ関数およびクラスのメンバ変数、更には標準クラスであるvectorクラスとpairクラスについて理解してから戻ってくるとよいかもしれません。
  
 
=='''文字列ファイルパス操作'''==
 
=='''文字列ファイルパス操作'''==

2014年10月3日 (金) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス