★文字と文字列(文字2)★


前回の続きで「文字」について書いていきます。


「文字」の'A'を「10進数」で表示すると65になります。

「文字」の'B'を「10進数」で表示すると66になります。

文字コード表」で確認してください。

「文字」の'A'と'B'は「数値」で1異なるだけです。

そこで、次のプログラムを実行してみてください。

<sample program 078-01>

#include <stdio.h>

int main(void)
{
    char data = 'A';

    data = data + 1;

    printf("%c\n", data);

    return 0;
}

<実行結果>

B
続行するには何かキーを押してください・・・

「文字」の'A'に1を加えると「文字」の'B'になりました。

見た目は「文字」の'A'ですが、元データは2進数の「0100 0001」というビット列です。

これに1を加えると「0100 0010」となり、「16進数」で42、「10進数」で66になります。

「10進数」の66を「文字」で表示すると'B'になります。

このように「文字」も計算することが出来るのです。


もう1つプログラムを作ってみましょう。

まず、枠組みを作ります。

<sample program 078-02>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    printf("%c\n", data);

    return 0;
}

<実行結果>

B
B
続行するには何かキーを押してください・・・

scanfで1文字入力し、そのまま表示するプログラムです。

これを改良して、以下のプログラムを作ってみてください。

・アルファベットの大文字1文字を入力し、小文字に変換して表示する

<実行結果>

B
b
続行するには何かキーを押してください・・・

文字コード表」をよく見て、大文字と小文字の関係を考えて下さい。









































解答例です。


<sample program 078-03>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    data = data + 32;

    printf("%c\n", data);

    return 0;
}

<実行結果>

B
b
続行するには何かキーを押してください・・・

  「大文字」の'A'を「10進数」で見ると65です。

  「小文字」の'a'を「10進数」で見ると97です。

同じように、

  「大文字」の'Z'を「10進数」で見ると90です。

  「小文字」の'z'を「10進数」で見ると122です。

どちらも「大文字」に「10進数」の32を加えたものが「小文字」になっています。

逆に言うと「小文字」から32を引くと「大文字」になる、ということですね。

逆に言うと「小文字」から32を引くと「大文字」になる、ということですね。


「10進数」の32を「文字」としてみると' '(半角空白)です。

ということは、↓のように書くことも出来る、ということです。

<sample program 078-04>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    data = data + ' ';

    printf("%c\n", data);

    return 0;
}

<実行結果>

D
d
続行するには何かキーを押してください・・・

' '(半角空白)は「10進数」の32と同じですから、「大文字」に「半角空白」を加えると「小文字」になります。


もう1つ変換プログラムを考えてみましょう。

文字コード表」には、「数字」も載っています。

  「数字」の'0'は「10進数」で48、「16進数」で30
  「数字」の'1'は「10進数」で49、「16進数」で31
  ・
  ・
  ・
  「数字」の'9'は「10進数」で57、「16進数」で39

これらは「数字」であって「数値」ではありません

「数字」の'1'に「数字」の'0'を加えると「10進数」で97となり「文字」の'a'になります。

「数値」の1に「数値」の0を加えると1になります。

「数字」のままでは計算には使えないということです。

しかし、「数字」を「数値」に変換しなければならない場合もあります。


そこで「数字」を「数値」に変換するプログラムを作ってみましょう。

↓のプログラムを元に作ってみてください。。

<sample program 078-05>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    printf("%d\n", data);

    return 0;
}

このままで実行するとこのようになります。

<実行結果>

3
51
続行するには何かキーを押してください・・・

「数字」の3は「10進数」で51ですから、そのままの数値が表示されます。

これを次のように変換したいのです。

<実行結果>

3
3
続行するには何かキーを押してください・・・

分かりづらいですが、上の3は「数字」で、下の3は「数値」です。

考えて作ってみてください。









































解答例です。


<sample program 078-06-1>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    data = data - 48;

    printf("%d\n", data);

    return 0;
}

または、

<sample program 078-06-2>

#include <stdio.h>

int main(void)
{
    char data;

    scanf("%c", &data);

    data = data - '0';

    printf("%d\n", data);

    return 0;
}

<実行結果>

3
3
続行するには何かキーを押してください・・・

「数字」の'0'と「数値」の0は「10進数」で48の違いがあります。

「数字」から48を引くと「数値」に変わります。

また、「10進数」の48を「文字」で考えると'0'です。

「数字」から「文字の'0'」を引くと「数値」に変わります。


次回は「文字」の範囲をチェックする方法について書きます。


次へ

戻る

目次へ