第2回:文字と文字列


これまでは,数字を主に扱ってきました.今週は,文字と文字列を取り上げます.

参考:  配列のページ


文字型

コンピュータ内部は,二進数の数字の世界でした.それでは,文字はどうやって表現するのでしょう? → 文字コード

コンピュータでは,英数字などの文字をそれぞれ0から127の番号に対応させて管理しています.

一般に文字コードを表現するには16進数を用います.下の表では,横が16進数の2桁目,縦が16進数の1桁目を表し,赤い文字で10進数の値を書きました.たとえば,大文字の「」は,16進数では「41」,10進数では「65」で表されます.16進数で00から20までには,特殊な意味のある文字が割り当てられています.

文字コード表

00 10 20 30 40 50 60 70
0 NUL 0 DLE 16 SP 32 0 48 @ 64 P 80 ` 96 p 112
1 SOH 1 DC1 17 ! 33 1 49 A 65 Q 81 a 97 q 113
2 STX 2 DC2 18 " 34 2 50 B 66 R 82 b 98 r 114
3 ETX 3 DC3 19 # 35 3 51 C 67 S 83 c 99 s 115
4 EOT 4 DC4 20 $ 36 4 52 D 68 T 84 d 100 t 116
5 ENQ 5 NAK 21 % 37 5 53 E 69 U 85 e 101 u 117
6 ACK 6 SYN 22 & 38 6 54 F 70 V 86 f 102 v 118
7 BEL 7 ETB 23 ' 39 7 55 G 71 W 87 g 103 w 119
8 BS 8 CAN 24 ( 40 8 56 H 72 X 88 h 104 x 120
9 HT 9 EM 25 ) 41 9 57 I 73 Y 89 i 105 y 121
A LF 10 SUB 26 * 42 : 58 J 74 Z 90 j 106 z 122
B VT 11 ESC 27 + 43 ; 59 K 75 [ 91 k 107 { 123
C FF 12 FS 28 , 44 < 60 L 76 \ 92 l 108 | 124
D CR 13 GS 29 - 45 = 61 M 77 ] 93 m 109 } 125
E SO 14 RS 30 . 46 > 62 N 78 ^ 94 n 110 ~ 126
F SI 15 US 31 / 47 ? 63 O 79 _ 95 o 111 DEL 127

C言語で文字といば,英語の半角の文字で,これを格納するための変数が char 型です.文字をプログラム中で表すときは,シングルクオーテーションで囲みます.(例:'A'

例:

#include <stdio.h>

void main()
{
    char c;

    printf("1文字入力してください");
    c = getchar();        /* キーボードから半角文字1つを得る命令 */

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

実行結果は,どうなりましたか?

参考:書式指定子

%d 10進数
%o 8進数
%x 16進数
%f 浮動小数点
%c 1文字
%s 文字列

[注意] 文字型 char には,半角1文字だけしか代入できません.また,漢字なども代入できません.


文字の計算

コンピュータ内では,文字は全て数字として扱われます.では,

    a = 'd';

    a++;

    printf("%c",a);


とすると,どうなるでしょう.

【演習】

キーボードから1文字小文字を入力すると,大文字に変換して画面に表示するプログラムを作成する.


文字列

複数の文字(文字列)や日本語を扱うにはどうしたらよいでしょう.文字を組み合わせて配列にした,文字列を用います.文字列をプログラム中で記述するときは,ダブルクオーテーションで囲みます.(例:"ABC""日本"

[文字配列の注意点]

文字配列を扱うには,文字列を構成する文字のほかにもうひとつ文字コード"0x00"または"\0"(ヌル文字)が必要となります.配列は,実際に必要とする文字数よりも,余分に1文字分用意する必要があります.足りないと致命的なエラーとなります.

文字列を初期化するには,

char c[5] = "ABCD";

とします.また,配列の要素の数を省略すると自動的に文字数+1個の配列が用意されます.

char c[ ] = "ABCD";

例:

#include <stdio.h>

void main()
{
    char c[5]="ABC0";
    int i;

    printf("与えられた文字列は%sです\n",c);

    for(i=0; i<5; i++){
        printf("%d文字目は%cです.コードは0x%xです.\n",i+1,c[i],c[i]);
    }  
}


文字列の入力

#include <stdio.h>

void main()
{
    char c[256];

    printf("文字を入力してください:");

    scanf("%s", c);

    printf("入力された文字列は%sです\n",c);
}

これまでの,数字の入力と異なり,&cとはならないことに注意してください.

【演習】

キーボードから文字列を入力すると,何文字入力されたかを画面に表示するプログラムを作成する.

ヒント:文字列の終わりはnull文字で判断する.


演習で作成した文字と文字列のプログラムを提出する