C言語の標準ライブラリには文字型データを扱うためのライブラリ関数が用意されている。以下はその一部である。
上で紹介した関数は ctype.hをインクルードすることで使用可能となります。(他にもいろいろと便利な関数があるので、Visual C++のヘルプを使って調べてみるとよい)
ctype-test.cをコンパイル・実行し、下記の出力が得られることを確認してください。
#include <ctype.h> /* ctype.hをインクルード */
#include <stdio.h>
void check_char(char c)
{
printf("check '%c'¥n", c);
if (isalpha(c)) { /* アルファベットかどうか */
printf("'%c' is alphabet¥n", c);
}
if (isdigit(c)) { /* 数字かどうか */
printf("'%c' is digit char¥n", c);
}
if (isupper(c)) { /* 大文字かどうか */
printf("'%c' is uppercase char¥n", c);
printf("lowercase of '%c' is '%c'¥n", c, tolower(c));
}
if (islower(c)) { /* 小文字かどうか */
printf("'%c' is lowercase char¥n", c);
printf("uppercase of '%c' is '%c'¥n", c, toupper(c));
}
if (isspace(c)) { /* 空白文字かどうか */
printf("'%c' is white space¥n", c);
}
printf("¥n");
}
int main(void)
{
int c;
printf("input character=");
c = getchar(); /* 1文字入力 */
check_char(c); /* 入力した文字をチェック */
return 0;
}
実行結果例(斜字体部分はユーザの入力)
('a'を入力した場合)
input character=a
check 'a'
'a' is alphabet
'a' is lowercase char
uppercase of 'a' is 'A'
('B'を入力した場合)
input character=B
check 'B'
'B' is alphabet
'B' is uppercase char
lowercase of 'B' is 'b'
('7'を入力した場合)
input character=7
check '7'
'7' is digit char
(' '(スペース)を入力した場合)
input character=
check ' '
' ' is white space
文字型データの入出力として以下の関数が用意されている。これらの関数は stdio.hをインクルードすることで使用可能となる。
toupper.cをコンパイル・実行し、資料と同じ出力が得られることを確認してください。
入力した文字はint型の変数cに格納されてから、大文字にして出力されます。これは上で説明した通り、EOFを区別するためです。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int c;
while ((c = getchar()) != EOF) /* 入力が終わるまで1文字ずつ入力 */
putchar(toupper(c)); /* 大文字にして出力 */
return 0;
}
以下は実行結果です。1行入力後エンターキーを叩くと入力した文章が大文字にして出力されます。
(プログラムの終了はCtrl-Z(windowsの場合)を押して入力を終了するか、Ctrl-Cを押して強制終了する)
a quick brown fox jumps over the lazy dog.
A QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
上記のサンプルコードで変数 cの型を int型から char型にすると、入力文字がなくなっても変数 cの値が EOFにならなくなるため、whileループが終了せず、プログラムが停止しなくなります。