大文字と小文字を区別せずに文字列を比較する

CompareStringを利用すると大文字と小文字を区別しない文字列比較や全角文字と半角文字を区別しない文字列比較などができる。

このAPIは戻り値がstrcmpなどの通常の比較関数とは異なることに注意。戻り値から2を引いた値がstrcmpの戻り値と同じように扱えるようになる。つまりCompareStringによって文字列が等しいと判断された時の戻り値は2となる。

void	Test(void)
{
	int		nRet;

	//"あいうABCDEF"と"あいうabcdef"を比較(結果は「同じ」と判断)
	nRet = ::CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,_T("あいうABCDEF"),-1,_T("あいうabcdef"),-1);
	if(nRet - 2 == 0)
		::MessageBox(NULL,_T("同じです"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("違います"),_T(""),MB_OK);


	//"ABC"と"abc"を比較(結果は「同じ」と判断)
	nRet = ::CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,_T("ABC"),-1,_T("abc"),-1);
	if(nRet - 2 == 0)
		::MessageBox(NULL,_T("同じです"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("違います"),_T(""),MB_OK);


	//"abc"と"abc"を比較(結果は「違う」と判断)
	nRet = ::CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,_T("abc"),-1,_T("abc"),-1);
	if(nRet - 2 == 0)
		::MessageBox(NULL,_T("同じです"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("違います"),_T(""),MB_OK);


	//"abc"と"abc"を比較(結果は「同じ」と判断)
	nRet = ::CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE | NORM_IGNOREWIDTH,_T("abc"),-1,_T("abc"),-1);
	if(nRet - 2 == 0)
		::MessageBox(NULL,_T("同じです"),_T(""),MB_OK);
	else
		::MessageBox(NULL,_T("違います"),_T(""),MB_OK);
}

プロジェクトファイルをダウンロード


カテゴリー「文字列操作」 のエントリー