- 1. 概要						
 
- 2. EUC 半角文字数を数える	
 
 
1. 概要
 表題にもう少し、解説をつけないとわかりにくい話です。
 ちょっとした作業で必要になったので。
 「EUC」の半角文字がはいった文字列があって、その文字数を数えるのです。
 半角文字としてはいっているのは「0~9」までの数字・「A~Z」、「a~z」の英字、および「ア~ン」コード的には「ヲ~ン」) までのカナ。
 記号はなし。
 文字列は「NULL」終端しているということが条件。
 「NULL」が出現した時点で文字列の終了とみなすし、「NULL」が出現するまでに、前出の条件以外の文字が出現したら「NG」扱いで文字数「0」とする。
 
 というのが命題です。
 何がややこしいかというと「EUC」では半角カナは2バイト文字になっているということなのです。
 つまり「strlen」では、半角カナがはいっている文字数分、多く数えてしまうのです。
2. EUC 半角文字数を数える
 「EUC」の文字コードに関しては「文字コード表 日本語EUC(euc-jp)」をご参照ください。
 命題について書いたコードが
int strlenHalfEUC(const unsigned char string[])
{
	int i;
	int count = 0;
	for (i=0; ; i++)
	{
		if (string[i] == '\0')
		{
			break;
		}
		if ((('0' <= string[i]) && (string[i] <= '9')) ||
			(('A' <= string[i]) && (string[i] <= 'Z')) ||
			(('a' <= string[i]) && (string[i] <= 'z')))
		{
			count += 1;
		}
		else
		if  ((string[i] == 0x8E) &&										//	半角カナは 0x8EA6(ヲ)~0x8EDD(ン)
			((0xA6 <= string[i+1]) && (string[i+1] <= 0xDD)))
		{
			count += 1;
			i += 1;
		}
		else
		{
			return 0;													//	半角文字以外を検出
		}
	}
	return count;
}
 
 になります。
 くっきり動作します。
 
 | 
 |