C言語

【C言語】文字が全角、半角のどちらかを判定する

プログラミング初心者向けの練習問題の一つに対象の文字が全角、半角のどちらであるかを判定するプログラムの作成があります。

本記事では、前述のプログラムの作成方法について解説しています。

文字コードについて

入力された文字が全角、半角のどちらかを判別するプログラムを作成するためには、まず文字コードについて理解しておく必要があります。

文字コードとは

コンピュータ上ではあらゆるデータは0と1の組み合わせによって表現されます。

当然、文字や数字などの記号も0と1の組み合わせによって表現されており、それぞれの記号に対応付けられた値のことを文字コードと呼びます。

例として以下に文字コードの一つであるUTF-8において、半角文字とそれに対応する値の一覧を示します。

文字コード: 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2A 0x2B 0x2C 0x2D 0x2E 0x2F 
   記号:         !    "    #    $    %    &    '    (    )    *    +    ,    -    .    / 

文字コード: 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3A 0x3B 0x3C 0x3D 0x3E 0x3F 
   記号:    0    1    2    3    4    5    6    7    8    9    :    ;    <    =    >    ? 

文字コード: 0x40 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48 0x49 0x4A 0x4B 0x4C 0x4D 0x4E 0x4F 
   記号:    @    A    B    C    D    E    F    G    H    I    J    K    L    M    N    O 

文字コード: 0x50 0x51 0x52 0x53 0x54 0x55 0x56 0x57 0x58 0x59 0x5A 0x5B 0x5C 0x5D 0x5E 0x5F 
   記号:    P    Q    R    S    T    U    V    W    X    Y    Z    [    \    ]    ^    _ 

文字コード: 0x60 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6A 0x6B 0x6C 0x6D 0x6E 0x6F 
   記号:    `    a    b    c    d    e    f    g    h    i    j    k    l    m    n    o 

文字コード: 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7A 0x7B 0x7C 0x7D 0x7E 0x7F 
   記号:    p    q    r    s    t    u    v    w    x    y    z    {    |    }    ~      

なお、文字としての属性が近いものは文字コード上でも近い値を取る傾向があるため、この性質を利用して文字の種類を判別する処理が可能です。

例)半角文字の文字コードは0x21~0x7Eの範囲に収まるため、これ以外の値を取る文字コードは全角文字として判断するなど

実際にプログラムを作成してみる

それでは実際に入力された文字が全角、半角のどちらであるかを判定するプログラムを作成していきます。

プログラム作成の手順

ここでは、以下の手順で処理を実装します。

  1. ユーザに任意の文字を入力させる
  2. 入力された文字が以下の条件に合致するかを調べる
    ・文字コードの値が0x21~0x7Eの範囲内であれば半角文字と判定
    ・それ以外であれば全角文字と判定

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  char moji[10];

  printf("任意の文字を入力して下さい:");
  scanf("%s", &moji);

  if (0x21<=moji[0] && moji[0]<=0x7E) {
    printf("-> 半角文字\n");
  } else {
    printf("-> 全角文字\n");
  }
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

任意の値を入力して下さい:A
-> 半角文字
任意の値を入力して下さい:あ
-> 全角文字