全角/半角混じり文字列の文字数
C言語ケーススタディ
 文字列の文字数は strlen() 関数でカウントすることができます。 しかし、全角文字が混じった文字列の場合、文字数をカウントすることができません。  次のプログラムは、 strlen() 関数を使用して全角文字の混じった文字列の文字数をカウントしています。

                                                                               
main()
{
	char	*str = "漢字abcあいう123";

	printf("文字数:%d\n", strlen(str));
}

 実行結果として「文字数:16」と表示されます。strlen() 関数は、全角文字を2文字(2バイト)としてカウントしてしまいます。 正確な文字数をカウントするには全角文字の処理方法で解説したように文字列内の文字が全角か半角かを確認しながら文字数をカウントする必要があります。

                                                                               
main()
{
	char	*str = "漢字abcあいう123";
	int	i1;
	int count = 0;

	for(i1 =0;;){
		if(str[i1] == '\0')
			break;
		if(_ismbblead(str[i1])){
			if(str[i1+1] == '\0'){
				count++;
				break;
			}
			count++;
			i1 += 2;
			continue;
		}
		count++;
		i1++;
	}
	printf("文字数:%d\n", count);
}

 実行結果として「文字数:11」と表示されます。このように文字列中の全角文字と半角文字を区別することで文字数を正確にカウントできます。
 C言語では、全角文字の混じりの文字列の文字数をカウントする関数が用意されています。 Study Cでは _mbslen()関数 を使用します。 次のプログラムは、 _mbslen() 関数を使用して全角文字の混じった文字列の文字数をカウントしています。

                                                                               
main()
{
	char	*str = "漢字abcあいう123";

	printf("文字数:%d\n", strlen(str));
}

 実行結果として「文字数:11」と表示されます。_mbslen() 関数でも文字数を正確にカウントできます。

 Study Cでは、プログラムを作成しなくても _mbslen() 関数などの実行結果を確認することができます。 Study Cのコマンドモードで「expr _mbslen("....")」のように入力し実行することができます。

                                                                               
C:\StudyC\MyProg>expr _mbslen("漢字abcあいう123")
11 0xb

C:\StudyC\MyProg>expr strlen("漢字abcあいう123")
16 0x10

 u_intは、実行結果の型、11、0xbはそれぞれ10進数と16進数表記の結果の値です。

お問い合わせ先 C言語のトップページに戻る Copyright(C) 2011 潟Iーキッド