全角/半角の文字列長

CStringT で全角/半角の文字列長を表示します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. ソースプログラムです。
    ファイル名 説明
    zenkaku.cpp 全角/半角の文字列長
  2. CString Class を使うときは cstringt.h と atlstr.h を取り込みます。
    ワイドキャラクタで全角文字(漢字など)を表示するときはロケートを設定します。
    locale.h を取り込んで setlocale() 関数で "japanese" に設定して下さい。
        #include <stdio.h>
        #include <conio.h>
        #include <cstringt.h>
        #include <atlstr.h>
        #include <locale.h<
    
        setlocale(LC_ALL, "japanese");
        
  3. 文字列領域の定義です。
    str[] は従来の文字列(文字の配列)です。
    s1 は char型の文字列として定義しています。
    s2 は wchar_t型の文字列として定義しています。
    書き方はややこしいのですが、気にしないで下さい。 (^_^;)
        char    str[] = "全角漢字 String";
        CStringT <char, StrTraitATL<char, ChTraitsCRT<char>>> s1;
        CStringT <wchar_t, StrTraitATL<wchar_t, ChTraitsCRT<wchar_t>>> s2;
        
  4. 最初に str[] の文字列と文字列長を表示します。
    次に str[] を s1 に代入して、文字列と文字列長を表示します。
    続いて str[] を s2 に代入して、文字列と文字列長を表示します。
    s2 は wchar_t型なのでコードの変換が必要なのですが、自動的に行ってくれます。
    wchar_t では半角/全角の区別は無く、全て16ビットで格納されます。
    s2 の文字列表示と、文字列の長さに注目して下さい。
    setlocale() の行をコメントアウトして s2 の全角文字が表示されないことを確認して下さい。
        printf("%s %d\n",str,strlen(str));
        s1 = str;
        printf("%s %d\n",s1,s1.GetLength());
        s2 = str;
        wprintf(L"%s %d\n",s2,s2.GetLength());
        
  5. プログラムを実行した結果です。
    c:\DATA\Cpp\BAT\Console>cl zenkaku.cpp
    Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    zenkaku.cpp
    Microsoft (R) Incremental Linker Version 8.00.50727.762
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    /out:zenkaku.exe
    zenkaku.obj
    
    c:\DATA\Cpp\BAT\Console>zenkaku
    全角漢字 String 15
    全角漢字 String 15
    全角漢字 String 11
    

超初心者のプログラム入門(C/C++)