C 文字列操作 新しいページはコチラ
提供: yonewiki
71行: | 71行: | ||
2/ 3:cStr0[ 2]=表示:よねウィキの機能2<yonewiki> | 2/ 3:cStr0[ 2]=表示:よねウィキの機能2<yonewiki> | ||
StrCount=22 | StrCount=22 | ||
+ | </syntaxhighlight> | ||
+ | _mbslenは文字列長探索をしたい文字列変数の引数が、unsigned char型ですので、<br /> | ||
+ | wchar_t型、char型の引数では文字列長を探索することは出来ません。あえて実施するならば、<br /> | ||
+ | reinterpret_cast<unsigned char*>(※charポインタ型※)と強制的なキャストを実施することで、動作させることができます。<br /> | ||
+ | _mbstrlenはchar型を引数にしますので、wchar_t型を使わない場合の日本語文字列長検索として使うことが出来ます。<br /> | ||
+ | 但し、この強制キャストは定数文字列const宣言のある文字列に対しては操作が出来ないため、文字列のコピーを作成する必要があります。<br /> | ||
+ | 文字列コピー操作の詳細は次の項目に記載予定なので、順番に読み進めている人は、コピー操作について理解してから戻ってきた方が良いかもしれません。<br /> | ||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include <tchar.h> | ||
+ | int main() { | ||
+ | _tsetlocale(LC_ALL, _T("Japanese")); | ||
+ | const char *cStr1[]={"", "表示:よねウィキの機能<yonewiki>", "表示:よねウィキの機能1<yonewiki>", "表示:よねウィキの機能2<yonewiki>"}; | ||
+ | char **ppcStr1 = new char* [sizeof(cStr0)/sizeof(*cStr0)]; | ||
+ | _tprintf(_T("const マルチバイト文字→マルチバイト文字コピー→_mbslen関数2バイト文字認識文字列長探索\n")); | ||
+ | for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | ||
+ | ppcStr1[i] = new char[strlen(cStr0[i]) + 1];//まずは単純に文字列をコピーするための領域を確保。 | ||
+ | |||
+ | strcpy_s(ppcStr1[i], strlen(cStr0[i]) + 1,cStr0[i]); | ||
+ | |||
+ | } | ||
+ | for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | ||
+ | printf("%2d/%2d:cStr0[%2d]=%s\nStrCount=%d\n\n",i, sizeof(cStr0)/sizeof(*cStr0),i, cStr0[i],_mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i]))); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | という具合にして、const char→char→_mabslenで文字列長探索が出来ます。<br /> | ||
+ | 出力結果は以下のとおりです。<br /> | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | const マルチバイト文字→マルチバイト文字コピー→_mbslen関数2バイト文字認識文字列長探索 | ||
+ | 0/ 4:cStr2[ 0]= | ||
+ | StrCount=0 | ||
+ | |||
+ | 1/ 4:cStr2[ 1]=表示:よねウィキの機能<yonewiki> | ||
+ | StrCount=21 | ||
+ | |||
+ | 2/ 4:cStr2[ 2]=表示:よねウィキの機能1<yonewiki> | ||
+ | StrCount=22 | ||
+ | |||
+ | 3/ 4:cStr2[ 3]=表示:よねウィキの機能2<yonewiki> | ||
+ | StrCount=22 | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | _mbstrlen関数を使う場合はコピー操作が必要にならず、const宣言している文字列変数を使っての文字列長探索ができます。<br /> | ||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include <tchar.h> | ||
+ | int main() { | ||
+ | _tsetlocale(LC_ALL, _T("Japanese")); | ||
+ | const char *cStr1[]={"", "表示:よねウィキの機能<yonewiki>", "表示:よねウィキの機能1<yonewiki>", "表示:よねウィキの機能2<yonewiki>"}; | ||
+ | char **ppcStr1 = new char* [sizeof(cStr0)/sizeof(*cStr0)]; | ||
+ | _tprintf(_T("const マルチバイト文字→_mbstrlen関数2バイト文字認識文字列長探索\n")); | ||
+ | for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | ||
+ | printf("%2d/%2d:cStr0[%2d]=%s\nStrCount=%d\n\n",i, sizeof(cStr0)/sizeof(*cStr0),i, cStr0[i],_mbstrlen(cStr0[i])); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | 出力結果は以下のとおりです。<br /> | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | const マルチバイト文字→_mbstrlen関数2バイト文字認識文字列長探索 | ||
+ | 0/ 4:cStr2[ 0]= | ||
+ | StrCount=0 | ||
+ | |||
+ | 1/ 4:cStr2[ 1]=表示:よねウィキの機能<yonewiki> | ||
+ | StrCount=21 | ||
+ | |||
+ | 2/ 4:cStr2[ 2]=表示:よねウィキの機能1<yonewiki> | ||
+ | StrCount=22 | ||
+ | |||
+ | 3/ 4:cStr2[ 3]=表示:よねウィキの機能2<yonewiki> | ||
+ | StrCount=22 | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
*コピー | *コピー | ||
88行: | 158行: | ||
*文字列の検索と置換 | *文字列の検索と置換 | ||
*ファイルへの入出力 | *ファイルへの入出力 | ||
+ | <!-- | ||
+ | {|class="wikitable" | ||
+ | !上位ビッツ\下位ビッツ!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!A!!B!!C!!D!!E!!F | ||
+ | |- | ||
+ | |0||NUL||SOH||STX||ETX||EOT||ENQ||ACK||BEL|||BS||HT||LF||VT||FF||CR||SO||SI | ||
+ | |- | ||
+ | |1||DLE||DC1||DC2||DC3||DC4||NAK||SYN||ETB||CAN||EM||SUB||ESC||IS4||IS3||IS2||IS1 | ||
+ | |- | ||
+ | |2||SP||!||"||#||$||%||&||'||(||)||*||+||,||-||.||/ | ||
+ | |- | ||
+ | |3||0||1||2||3||4||5||6||7||8||9||:||;||<||=||>||? | ||
+ | |- | ||
+ | |4||@||A||B||C||D||E||F||G||H||I||J||K||L||M||N||O | ||
+ | |- | ||
+ | |5||P||Q||R||S||T||U||V||W||X||Y||Z||[||\||]||^||_ | ||
+ | |- | ||
+ | |6||`||a||b||c||d||e||f||g||h||i||j||k||l||m||n||o | ||
+ | |- | ||
+ | |7||p||q||r||s||t||u||v||w||x||y||z||{|| | ||} ||~||DEL | ||
+ | |- | ||
+ | |} | ||
+ | {|class="wikitable" | ||
+ | !上位ビッツ\下位ビッツ!!0!!1!!2!!3!!4!!5!!6!!7!!8!!9!!A!!B!!C!!D!!E!!F | ||
+ | |- | ||
+ | |8||||||BPH||NBH||||NEL||SSA||ESA||HTS||HTJ||VTS||PLD||PLU||RI||SS2||SS3 | ||
+ | |- | ||
+ | |9||DCS||PU1||PU2||STS||CCH||MW||SPA||EPA||SOS||||SCI||CSI||ST||OSC||PM||APC | ||
+ | |- | ||
+ | |A||||。||「||」||、||・||ヲ||ァ||ィ||ゥ||ェ||ォ||ャ||ュ||ョ||ッ | ||
+ | |- | ||
+ | |B||ー||ア||イ||ウ||エ||オ||カ||キ||ク||ケ||コ||サ||シ||ス||セ||ソ | ||
+ | |- | ||
+ | |C||タ||チ||ツ||テ||ト||ナ||ニ||ヌ||ネ||ノ||ハ||ヒ||フ||ヘ||ホ||マ | ||
+ | |- | ||
+ | |D||ミ||ム||メ||モ||ヤ||ユ||ヨ||ラ||リ||ル||レ||ロ||ワ||ン||゙||゚ | ||
+ | |- | ||
+ | |E|||||||||||||||||||||||||||||||| | ||
+ | |- | ||
+ | |F|||||||||||||||||||||||||||||||| | ||
+ | |- | ||
+ | --> |