C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列比較) |
(→文字列比較) |
||
517行: | 517行: | ||
ncpmは比較する文字数指定あり、_lはロケール個別指定、と考えればかなりすっきり。collによる比較はあとで考えましょう。<br /> | ncpmは比較する文字数指定あり、_lはロケール個別指定、と考えればかなりすっきり。collによる比較はあとで考えましょう。<br /> | ||
<br /> | <br /> | ||
+ | <syntaxhighlight lang="cpp" line start="1"> | ||
+ | #include <iostream> | ||
+ | //#include<locale.h> wchar.hがインクルードされていれば、いらない。 | ||
+ | #include<wchar.h> | ||
+ | int main() { | ||
+ | _wsetlocale( LC_ALL, L("Japanese")); | ||
+ | size_t sizecStr0=0; | ||
+ | long iCmpResult =0; | ||
+ | TCHAR *cStr0[]={_T("表示:よねウィキの機能0<yonewiki>"),_T("表示Nよねウィキの機能12<yonewiki>"),_T("表示:よねウィキの機能2<yonewiki>")}; | ||
+ | const char *cStr1[]={" ","表示:よねウィキの機能<yonewiki>","表示:よねウィキの機能1<yonewiki>","表示:よねウィキの機能2<yonewiki>"}; | ||
+ | TCHAR **ppcStr0 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)]; | ||
+ | char **ppcStr1 = new char*[sizeof(cStr1)/sizeof(*cStr1)]; | ||
+ | unsigned char **ppucStr2; | ||
+ | ppucStr2 = new unsigned char*[sizeof(cStr1)/sizeof(*cStr1)]; | ||
+ | |||
+ | TCHAR **ppcStr10 = new TCHAR*[sizeof(cStr0)/sizeof(*cStr0)]; | ||
+ | char **ppcStr11 = new char*[sizeof(cStr1)/sizeof(*cStr1)]; | ||
+ | unsigned char **ppucStr20; | ||
+ | ppucStr20 = new unsigned char*[sizeof(cStr1)/sizeof(*cStr1)]; | ||
+ | |||
+ | for(int i = 0; i < (sizeof(cStr0)/sizeof(*cStr0)); i++){ | ||
+ | ppcStr0[i] = new TCHAR[(_tcslen(cStr0[i]) * 2) + 1]; | ||
+ | ppcStr10[i] = new TCHAR[(_tcslen(cStr0[i]) * 2) + 1]; | ||
+ | _tcsncpy_s(ppcStr0[i], _tcslen(cStr0[i]) + 1,cStr0[i], _tcslen(cStr0[i]) + 1);//ココ! | ||
+ | _tcsncpy_s(ppcStr10[i], _tcslen(cStr0[i]) + 1,cStr0[i], _tcslen(cStr0[i]) + 1);//ココ! | ||
+ | _tcsncat_s(ppcStr0[i], (_tcslen(cStr0[i]) * 2) + 1,cStr0[i], _tcslen(cStr0[i]) + 1);//ココ! | ||
+ | } | ||
+ | |||
+ | //strcpy_s関数での文字列コピー | ||
+ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
+ | ppcStr1[i] = new char[(strlen(cStr1[i]) * 2) + 1]; | ||
+ | ppcStr11[i] = new char[(strlen(cStr1[i]) * 2) + 1]; | ||
+ | strncpy_s(ppcStr1[i], strlen(cStr1[i]) + 1,cStr1[i],strlen(cStr1[i]) + 1);//ココ! | ||
+ | strncpy_s(ppcStr11[i], strlen(cStr1[i]) + 1,cStr1[i],strlen(cStr1[i]) + 1);//ココ! | ||
+ | } | ||
+ | |||
+ | //_mbscpy_s関数での文字列コピー | ||
+ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
+ | sizecStr0 = (strlen(ppcStr1[i]) * 2) + 1; | ||
+ | ppucStr2[i] = new unsigned char[sizecStr0]; | ||
+ | ppucStr20[i] = new unsigned char[sizecStr0]; | ||
+ | _mbsncpy_s(ppucStr2[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]), _mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i])));//ココ! | ||
+ | _mbsncpy_s(ppucStr20[i], sizecStr0,reinterpret_cast<unsigned char*>(ppcStr1[i]), _mbslen(reinterpret_cast<unsigned char*>(ppcStr1[i])));//ココ! | ||
+ | } | ||
+ | |||
+ | //出力部分 | ||
+ | for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | ||
+ | _tprintf(_T("_tcslen(cStr0[i])=%d\nppcStr0=%s,\n cStr0=%s,\n"),_tcslen(cStr0[i]),*(ppcStr0 + i),*(cStr0 + i)); | ||
+ | for(int k = 0; k < sizeof(cStr0)/sizeof(*cStr0); k++){ | ||
+ | iCmpResult = _tcsncmp(*(ppcStr0 + i),*(ppcStr10 + k),_tcslen(cStr0[i])); | ||
+ | _tprintf(_T("i=%d, k=%d, iCmpResult=%ld,\n"),i,k,iCmpResult); | ||
+ | } | ||
+ | _tprintf(_T("\n")); | ||
+ | } | ||
+ | _tprintf(_T("\n")); | ||
+ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
+ | printf("strlen(cStr1[i])=%d\nppcStr1=%s,\n cStr1=%s,\n\n",strlen(cStr1[i]),*(ppcStr1 + i),*(cStr1 + i)); | ||
+ | for(int k = 0; k < (sizeof(cStr1)/sizeof(*cStr1)); k++){ | ||
+ | iCmpResult = strncmp(*(ppcStr1 + i),*(ppcStr11 + k),strlen(cStr1[i])); | ||
+ | _tprintf(_T("i=%d, k=%d, iCmpResult=%ld,\n"),i,k,iCmpResult); | ||
+ | } | ||
+ | _tprintf(_T("\n")); | ||
+ | } | ||
+ | for(int i = 0; i < (sizeof(cStr1)/sizeof(*cStr1)); i++){ | ||
+ | printf("_mbslen(cStr1[i])=%d\nppucStr2=%s,\n cStr1=%s,\n\n",_mbslen(ppucStr2[i]),ppucStr2[i],*(cStr1 + i)); | ||
+ | for(int k = 0; k < (sizeof(cStr1)/sizeof(*cStr1)); k++){ | ||
+ | iCmpResult = _mbsncmp(ppucStr2[i],ppucStr20[k],_mbslen(ppucStr2[i])); | ||
+ | _tprintf(_T("i=%d, k=%d, iCmpResult=%ld,\n"),i,k,iCmpResult); | ||
+ | } | ||
+ | _tprintf(_T("\n")); | ||
+ | } | ||
+ | |||
+ | //動的に確保したメモリの解放処理 | ||
+ | for(int i = 0; i < sizeof(cStr0)/sizeof(*cStr0); i++){ | ||
+ | delete[] *(ppcStr0 + i); | ||
+ | } | ||
+ | for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | ||
+ | delete[] *(ppcStr1 + i); | ||
+ | } | ||
+ | for(int i = 0; i < sizeof(cStr1)/sizeof(*cStr1); i++){ | ||
+ | delete[] *(ppucStr2 + i); | ||
+ | } | ||
+ | delete[] ppucStr2; | ||
+ | delete[] ppcStr0; | ||
+ | delete[] ppcStr1; | ||
+ | printf("\n"); | ||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 出力結果 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | _tcslen(cStr0[i])=22 | ||
+ | ppcStr0=表示:よねウィキの機能0<yonewiki>表示:よねウィキの機能0<yonewiki>, | ||
+ | cStr0=表示:よねウィキの機能0<yonewiki>, | ||
+ | i=0, k=0, iCmpResult=0, | ||
+ | i=0, k=1, iCmpResult=-20, | ||
+ | i=0, k=2, iCmpResult=-2, | ||
+ | |||
+ | _tcslen(cStr0[i])=23 | ||
+ | ppcStr0=表示Nよねウィキの機能12<yonewiki>表示Nよねウィキの機能12<yonewiki>, | ||
+ | cStr0=表示Nよねウィキの機能12<yonewiki>, | ||
+ | i=1, k=0, iCmpResult=20, | ||
+ | i=1, k=1, iCmpResult=0, | ||
+ | i=1, k=2, iCmpResult=20, | ||
+ | |||
+ | _tcslen(cStr0[i])=22 | ||
+ | ppcStr0=表示:よねウィキの機能2<yonewiki>表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr0=表示:よねウィキの機能2<yonewiki>, | ||
+ | i=2, k=0, iCmpResult=2, | ||
+ | i=2, k=1, iCmpResult=-20, | ||
+ | i=2, k=2, iCmpResult=0, | ||
+ | |||
+ | |||
+ | strlen(cStr1[i])=1 | ||
+ | ppcStr1= , | ||
+ | cStr1= , | ||
+ | |||
+ | i=0, k=0, iCmpResult=0, | ||
+ | i=0, k=1, iCmpResult=-1, | ||
+ | i=0, k=2, iCmpResult=-1, | ||
+ | i=0, k=3, iCmpResult=-1, | ||
+ | |||
+ | strlen(cStr1[i])=32 | ||
+ | ppcStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | |||
+ | i=1, k=0, iCmpResult=1, | ||
+ | i=1, k=1, iCmpResult=0, | ||
+ | i=1, k=2, iCmpResult=1, | ||
+ | i=1, k=3, iCmpResult=1, | ||
+ | |||
+ | strlen(cStr1[i])=33 | ||
+ | ppcStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | |||
+ | i=2, k=0, iCmpResult=1, | ||
+ | i=2, k=1, iCmpResult=-1, | ||
+ | i=2, k=2, iCmpResult=0, | ||
+ | i=2, k=3, iCmpResult=-1, | ||
+ | |||
+ | strlen(cStr1[i])=33 | ||
+ | ppcStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | |||
+ | i=3, k=0, iCmpResult=1, | ||
+ | i=3, k=1, iCmpResult=-1, | ||
+ | i=3, k=2, iCmpResult=1, | ||
+ | i=3, k=3, iCmpResult=0, | ||
+ | |||
+ | _mbslen(cStr1[i])=1 | ||
+ | ppucStr2= , | ||
+ | cStr1= , | ||
+ | |||
+ | i=0, k=0, iCmpResult=0, | ||
+ | i=0, k=1, iCmpResult=-1, | ||
+ | i=0, k=2, iCmpResult=-1, | ||
+ | i=0, k=3, iCmpResult=-1, | ||
+ | |||
+ | _mbslen(cStr1[i])=21 | ||
+ | ppucStr2=表示:よねウィキの機能<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能<yonewiki>, | ||
+ | |||
+ | i=1, k=0, iCmpResult=1, | ||
+ | i=1, k=1, iCmpResult=0, | ||
+ | i=1, k=2, iCmpResult=1, | ||
+ | i=1, k=3, iCmpResult=1, | ||
+ | |||
+ | _mbslen(cStr1[i])=22 | ||
+ | ppucStr2=表示:よねウィキの機能1<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能1<yonewiki>, | ||
+ | |||
+ | i=2, k=0, iCmpResult=1, | ||
+ | i=2, k=1, iCmpResult=-1, | ||
+ | i=2, k=2, iCmpResult=0, | ||
+ | i=2, k=3, iCmpResult=-1, | ||
+ | |||
+ | _mbslen(cStr1[i])=22 | ||
+ | ppucStr2=表示:よねウィキの機能2<yonewiki>, | ||
+ | cStr1=表示:よねウィキの機能2<yonewiki>, | ||
+ | |||
+ | i=3, k=0, iCmpResult=1, | ||
+ | i=3, k=1, iCmpResult=-1, | ||
+ | i=3, k=2, iCmpResult=1, | ||
+ | i=3, k=3, iCmpResult=0, | ||
+ | |||
+ | </syntaxhighlight> | ||
=='''文字列一致'''== | =='''文字列一致'''== |