|
> 今さらながらですが、ShiftJISの全角/半角混在文字列中の、特定位置が全角
>文字の2バイト目かそうでないかを判定するアルゴリズムを改良しようと思いま
>した。誰か詳しい人からコメントありましたらよろしくお願いします。
古いのと新しいのは同じ動作をしますね。
ただ、このコードだと全角第1バイトがTRUEで、それ以外(全角2バイト、半角、英数
字)はFALSEとなりますが。
実際、下の文字列は
日本語テスト012テスト
次のような結果になります(+:TRUE,-:FALSE)
+-+-+-+-+-+-------
趣味の問題ですが、私なら下みたいにコーディングします。
Window定義のTRUE,FALSEが1,0対応であるのに依存するのは危険だと思います(64BitW
indowsとかはその辺で問題が起きることもあるらしい)。
(psz != 0で、x > -&pszが仮定できるなら 最初の判定は省略できるので
ちょっとお得)
BOOL IsKanji2( const char* psz, int x ) {
if( x <= 0 ) {
return FALSE;
}
const char* pcEnd = psz + x;
const char* pcPtr = pcEnd - 1;
while( pcPtr >= psz ){
if( !IsDBCSLeadByte( *pcPtr ) ) {
break;
}
--pcPtr;
};
return ( (pcEnd - pcPtr) & 1 ) ? FALSE : TRUE;
}
|
|