文字

2017-12-01 (金) 07:57:03 (11d) | Topic path: Top / 授業 / C言語基礎 / 文字

これまで、文字列は、ダブル・クォーテーション " で囲まれたもので、printf関数またはscanf関数に渡すだけのものでした。

実は、文字列は文字を並べたデータ、つまり、文字の配列です。

そこで、まずは文字について説明します。

文字はchar型の変数

文字を格納するための変数の型はchar型です。

  char c;

文字はシングル・クォーテーションで囲む

文字列はダブル・クォーテーションで囲みましたが、文字はシングル・クォーテーション ' で囲みます。

  char c = 'A';

文字を入出力するときの変換指定子は %c

scanf関数でキーボードから文字を入力するときや、printf関数で変数に格納された文字を出力するときは、変換指定子を %c とします(プログラム1)。

  char c;

  scanf("%c", &c);
  printf(">> %c\n", c);

演習1

プログラム1を作成し、実行結果を確認せよ。

エスケープ・シーケンスは1文字

改行 \n、バックスラッシュ \\、ダブル・クォーテーション \" などのエスケープ・シーケンスは、1文字として扱われます(プログラム2)。

  char c = '\\';

  printf(">> %c", c);

演習2

プログラム2を作成し、実行結果を確認せよ。

文字は文字コードで表される

文字は、2進数の文字コードで表されていて、1バイト(8ビット)の符号なし整数です。

たとえば、ASCIIコードの場合、A は2進数の 01000001 と表されていて、16進数で表すと 41、10進数で表すと 65 です(プログラム3)。

  char c = 'A';

  printf(">> %d\n", c);

このプログラムを実行すると、次のようになります。

luna% a.out
>> 65

このため、文字を整数として考えると、足し算もできます(プログラム4)。

  char c = 'A' + 1;

  pinrtf(">> %c\n", c);

このプログラムを実行すると、次のようになります。

luna% a.out
>> B

演習3

プログラム3とプログラム4を作成し、実行結果を確認せよ。

数字を数値に変換する(おまけ)

文字を2進数の文字コードとして考えると、計算によって数字(文字)を数値に変えることができます。

  char c1, c2;
  int i1, i2;

  printf("数字を2回入力してください");
  scanf("%c", &c1);
  scanf("%c", &c2);

  i1 = c1 - '0';
  i2 = c2 - '0'; 

  printf("合計は%d\n", i1 + i2);

文字の種類を判別する(おまけ)

文字を2進数の文字コードとして考えると、文字コードの比較によって文字の種類を判別することができます。

  char c];

  printf("文字を入力してください");
  scanf("%c", c);

  if (c >= '0' && c <= '9') {
    printf("数字です\n");
  else if (c >= 'A' && c <= 'Z') {
    printf("大文字のアルファベットです\n");
  else if (c >= 'a' && c <= 'z') {
    printf("小文字のアルファベットです\n");
  } else {
    printf("数字またはアルファベットではありません");
  }

日本語やUnicodeの文字(おまけ)

日本語やUnicodeの文字は1バイトに収まりません。 そのため、ここで勉強したchar型では扱うことができません。

まとめ

文字を格納するための変数はchar型です。

文字はシングル・クォーテーションで囲んで表し、出力するときの変換指定子は %c です。

改行などの特別な文字は、エスケープ・シーケンスとしてバックスラッシュと1文字で表します。 エスケープ・シーケンスは、バックスラッシュと1文字で1文字分として扱われます。

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS