C言語ケーススタディ 全角/半角混じり文字列の文字数




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study 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進数表記の結果の値です。
【参照関数】
_ismbblead
_ismbbtrail
_ismbbkana

【関連項目】
C言語ケーススタディ 全角文字の処理方法
C言語ケーススタディ 全角/半角混じり文字列内の文字検索


[an error occurred while processing this directive]