C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列操作) |
(→文字列の検索と置換) |
||
4,075行: | 4,075行: | ||
部分一致の処理は難しいので、typedef関数とクラスと構造体のコンストラクタとテンプレートクラスとクラスのメンバ関数およびクラスのメンバ変数、更には標準クラスであるvectorクラスとpair構造体について理解してから戻ってくるとよいかもしれません。 | 部分一致の処理は難しいので、typedef関数とクラスと構造体のコンストラクタとテンプレートクラスとクラスのメンバ関数およびクラスのメンバ変数、更には標準クラスであるvectorクラスとpair構造体について理解してから戻ってくるとよいかもしれません。 | ||
+ | |||
ICUを使わない文字列検索としてはstrchrのような***chr系の一文字検索関数があります。見つかった位置のByte数を返してくれます。ICUの正規表現に比べると機能性は低いです。一文字を引数にするとき符号なし整数型にしなければいけないあたりは、初期値を与えての検索は楽ですが、実際に一文字の文字列から検索しようとすると大変なのかもしれません。実際に数えてみないと、一文字あたりが、1バイトなのか2バイトなのかわからないし…。こういう一文字検索だけを行う関数って使う人いるんだろか?って思う。やっぱstrstr系使うよね。 | ICUを使わない文字列検索としてはstrchrのような***chr系の一文字検索関数があります。見つかった位置のByte数を返してくれます。ICUの正規表現に比べると機能性は低いです。一文字を引数にするとき符号なし整数型にしなければいけないあたりは、初期値を与えての検索は楽ですが、実際に一文字の文字列から検索しようとすると大変なのかもしれません。実際に数えてみないと、一文字あたりが、1バイトなのか2バイトなのかわからないし…。こういう一文字検索だけを行う関数って使う人いるんだろか?って思う。やっぱstrstr系使うよね。 | ||
+ | |||
+ | |||
+ | 以下のサンプルでは文字列の検索をするもので、以下の関数も使っています。 | ||
+ | _strinc、_wcsinc、_mbsinc、_mbsinc_l のようなポインタ変数を1文字を進める関数。文字列の先頭を示していたものが次の文字になります。大元の文字列のポインタ変数を操作すると先頭文字を見失うので、通常は、同じアドレスを指し示すポインタ変数を複製して、複製したポインタ変数で操作します。 | ||
+ | 詳細は、以下のアドレスのとおりです。 | ||
+ | |||
+ | http://msdn.microsoft.com/ja-jp/library/vstudio/ex0hs2ad.aspx | ||
+ | |||
+ | _strdec、_wcsdec、_mbsdec、_mbsdec_l 一文字戻るにはこのような関数があります。 | ||
+ | |||
+ | http://msdn.microsoft.com/ja-jp/library/vstudio/cf10bexy.aspx | ||
+ | |||
+ | |||
+ | そして、strchr、wcschr、_mbschr、_mbschr_l は以下のような関数があって、ここでは_mbschrのサンプルを作りました。 | ||
+ | |||
+ | http://msdn.microsoft.com/ja-jp/library/vstudio/b34ccac3.aspx | ||
+ | |||
+ | |||
+ | 後方から検索するものとしては、strrchr、wcsrchr、_mbsrchr、_mbsrchr_lがあり、ここでは_mbsrchrを使っています。 | ||
+ | |||
+ | http://msdn.microsoft.com/ja-jp/library/vstudio/ftw0heb9.aspx | ||
+ | |||
+ | |||
+ | 更に文字列中を文字列で検索するものとしては、strstr、wcsstr、_mbsstr、_mbsstr_lがあり、ここでは_mbsstrを使っています。 | ||
+ | |||
+ | http://msdn.microsoft.com/ja-jp/library/vstudio/z9da80kz.aspx | ||
<syntaxhighlight lang="cpp" line start="1"> | <syntaxhighlight lang="cpp" line start="1"> |