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

提供: yonewiki
移動: 案内, 検索
(文字列コピー)
(文字列連結)
311行: 311行:
  
 
=='''文字列連結'''==
 
=='''文字列連結'''==
文字列の処理において、文字列を抜き出すことと、連結することはプログラミングにおいて、かなり頻繁に必要となる処理です。<br />
+
文字列の処理において、文字列を抜き出すことと、連結することはプログラミングにおいて、かなり頻繁に必要となる処理です。設定ファイルのようなものを書き出す場合に、設定1の値をAとユーザが指定した場合、文字列リテラルとして、「<設定1="」と「A」と「">」とを繋ぎ合わせて、記憶しておいて、あとで書き出し処理をしたり、あとで設定ファイルの中身を見る時に設定1の値を抜き出すためにAという値を抜き出す。そういう感じです。上記のようなXML形式の設定方法ならパースという手法によって、既に設定属性値と設定値を書き込んだり、読み込んだりするための関数が提供されていたりしますが、同じようなことを自分でやっていくということはあります。<br />
設定ファイルのようなものを書き出す場合に、設定1の値をAとユーザが指定した場合、文字列リテラルとして、<br />
+
 
<設定1="」と「A」と「">」とを繋ぎ合わせて、記憶しておいて、あとで書き出し処理をしたり、<br />
+
 
あとで設定ファイルの中身を見る時に設定1の値を抜き出すためにAという値を抜き出す。そういう感じです。<br />
+
上記のようなXML形式の設定方法ならパースという手法によって、既に設定属性値と設定値を書き込んだり、読み込んだりするための<br />
+
関数が提供されていたりしますが、同じようなことを自分でやっていくということはあります。<br />
+
<br />
+
 
連結は英語でcatenateと言うため、strcatのようなcatというキーワードが関数に使われます。<br />
 
連結は英語でcatenateと言うため、strcatのようなcatというキーワードが関数に使われます。<br />
 
リファレンスは以下の通りです。<br />
 
リファレンスは以下の通りです。<br />
331行: 327行:
 
_mbsnbcat、_mbsnbcat_l , _mbsnbcat_s、_mbsnbcat_s_l<br />
 
_mbsnbcat、_mbsnbcat_l , _mbsnbcat_s、_mbsnbcat_s_l<br />
 
<br />
 
<br />
例によって_sのついた連結先文字列の配列サイズを明記する関数に_lのついた個別ロケール設定関数。<br />
+
例によって_sのついた連結先文字列の配列サイズを明記する関数に_lのついた個別ロケール設定関数。そして連結させたい文字列の文字数を記述するncatに文字数をバイト数で指定するnbcat。あとはワイド文字のwcsで始まる関数。マルチバイトのstrで始まる関数。マルチバイト2バイト文字対応の_mbsで始まる関数。全部で22種類。引数は文字列コピーと同じですが、コピー先の変数が既に文字列が格納されてる\0で終わる文字列になっていて、処理をした結果、第一引数の文字列先頭アドレスの中身が文字列連結した結果になるという点が異なると覚えれば、連結とコピーは似ていると覚えればよいかと思います。先の文字列コピーのプログラムのコピーcpy系関数の後ろに連結cat系関数を追加して、文字列を2回繰り返されるようにしたサンプルです。所謂(いわゆる)、手抜きです。ただし、連結関数では連結後の文字列の配列大きさを要求されるため、あらかじめ動的に確保する領域が2倍になっていることに注意して下さい。<br />
そして連結させたい文字列の文字数を記述するncatに文字数をバイト数で指定するnbcat。<br />
+
 
あとはワイド文字のwcsで始まる関数。マルチバイトのstrで始まる関数。マルチバイト2バイト文字対応の_mbsで始まる関数。<br />
+
全部で22種類。<br />
+
引数は文字列コピーと同じですが、コピー先の変数が既に文字列が格納されてる\0で終わる文字列になっていて、処理をした結果、<br />
+
第一引数の文字列先頭アドレスの中身が文字列連結した結果になるという点が異なると覚えれば、連結とコピーは似ていると覚えればよいかと思います。<br />
+
先の文字列コピーのプログラムのコピーcpy系関数の後ろに連結cat系関数を追加して、文字列を2回繰り返されるようにしたサンプルです。<br />
+
所謂(いわゆる)、手抜きです。ただし、連結関数では連結後の文字列の配列大きさを要求されるため、あらかじめ動的に確保する領域が2倍になっていることに<br />
+
注意して下さい。<br />
+
 
<syntaxhighlight lang="cpp" line start="1">
 
<syntaxhighlight lang="cpp" line start="1">
 
#include <iostream>
 
#include <iostream>

2013年12月10日 (火) 00:00時点における版



個人用ツール
名前空間

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