たとえば,文字列から1文字を消去する場合,最上位ビットを見て0ならば1バイトの消去,1ならば2バイトの消去を行えばよい.処理が単純である.
□ 演習2
- list0403.c は,2つのASCII文字を入力し,大小比較をするプログラムである.
-
/* list0403.c */
#include <stdio.h>
main()
{
unsigned char c1[4],c2[4];
printf(”1つ目の文字を入力して下さい: ”);
fgets(c1,4,stdin);
printf(”2つ目の文字を入力して下さい: ”);
fgets(c2,4,stdin);
printf(”%c <=> %c\n”,c1[0],c2[0]);
if(c1[0] == c2[0])
printf(”等しい\”);
else if(c1[0] > c2[0])
printf(”1つ目の文字が大きい\n”);
else
printf(”2つ目の文字が大きい\n”);
}
- list0403.c の c1 および c2 は,4バイドの空間が確保されている.fgets では,4バイトの空間には,任意の2バイト,改行文字,および,終端文字を格納する.したがって,2バイト文字がちょうど1つ格納できる.
list0403.c を使って「亜」と「愛」の大小を比較せよ.eucコードを見て大小比較の結果を考察せよ.
- 2バイト文字も正しく大小比較ができるように変更せよ.⇒ prac0402.c
■ 文字コードによる配列変数のアクセス
- 文字コードは数値であるので,配列番号に使うことができる.たとえばASCII文字「a」は 0x61 であり,10進数では 97 という数値である.
- list0404.c は,「a」から「z」までのASCII文字が入力されることを想定したプログラムである.「a」が入力されると,c1[0]-'a' の結果は 0 であり,yomi[0] が表示される.
/* list0404.c */
#include <stdio.h>
main()
{
char *yomi[] = {
"エー", "ビー", "シー", "ディー", "イー", "エフ", "ジー",
"エイチ", "アイ", "ジェイ", "ケイ", "エル", "エム", "エヌ",
"オー", "ピー", "キュー", "アール", "エス", "ティー", "ユー",
"ブイ", "ダブリュ", "エックス", "ワイ", "ゼット"};
unsigned char c1[4];
fgets(c1,4,stdin);
printf(”%s\n”,yomi[c1[0]−’a’]);
}
□ 演習3
- 「A」から「Z」のASCII文字および「A」から「Z」,「a」から「z」のEUC文字が入力されても読みがなを表示するように改良せよ.また,対象外の入力の場合は,「なし」と表示せよ.⇒ prac0403.c
■ 宿題
以下のいずれか1つのプログラムを作成し,ソースファイルおよび動作結果を提出せよ.ソースファイルには,1行ごとに手書きでコメントを書くこと.
- 梅: list0404.c を改造して,ギリシャ文字の読みを出力するプログラムを作成せよ.⇒ prac0404.c
- 竹: eucコード文字うち,ASCIIコード表にあるものは半角に変換し,ASCIIコード表にないものは全角のまま出力するプログラムを作成せよ.⇒ prac0405.c
(c) Masato TOKUHISA, 2003, April. 29