C/C++言語で文字列解析をやる場合に避けては通れない部分、それが半角・全角の判定です(※ マルチバイト環境に限ります)。
とは言っても、実際には文字が1バイト長か、2バイト長かを判定します。

何バイト文字かを判定する関数は「_mbclen()」です。引数に、文字列を指定してやると、
先頭の文字が1バイトなのか2バイトなのかを返してくれます。

char *str="あいabcうえお";
printf("byte=%d\n",_mbclen((BYTE *)str));

上の例の場合、画面には2が出力されます。

ついでに、一文字ずつ表示する例も記述しておきます。

char *Str="あいabcうえお";
char *p=Str;
char tmp[3];
while(*p!='\0'){
	switch(_mbclen((BYTE*)p)){
	case 1:
		tmp[0]=*(p++);
		tmp[1]='\0';
		break;
	case 2:
		tmp[0]=*(p++);
		tmp[1]=*(p++);
		tmp[2]='\0';
		break;
	default:
		//error
		break;
	}
	printf("%s\n",tmp);
}

よく、条件によって、代入する値を変更する場合があります。

if(bFlag)
	nValue=16;
else
	nValue=165;

上のプログラムを三項演算子を使って書き直すと、次のようになります。

nValue = bFlag ? 16 : 165;

すっきりしましたね(ちょっと見にくいかもしれませんが)。

三項演算子の構文は次のような感じです。

左辺 = 条件式 ? 条件式が真の場合に代入する値 : 条件式が偽の場合に代入する値 ;

代入の時で無くても、値を必要とする場合ならばどこでも使用出来ます。

printf("%d\n", bFlag ? 16 : 126);

ついでに、関数も呼べます。

bFlag ? printf("真") : printf("偽");

文字列にも使えます(数値と同じですね)。

printf("%s\n", bFlag ? "真" : "偽");

結構使い道はあると思います。

記事検索

アーカイブ