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>
  
 
=='''文字列一致'''==
 
=='''文字列一致'''==

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



個人用ツール
名前空間

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