まずは、基本的なことである。
- コンピューターで文字を扱うときは、それはすべて、整数に置き換えて取り扱う。
文字と整数との対応を決めたものをコード表と言う。
- 1文字を表すためには、英数字では1バイト、日本語では2バイト必要である。
- 文字を扱うときには文字型の変数を使う。変数宣言の型は、「char」であ
る。これで、宣言された変数は1バイトの情報を記憶できる。すなわち、英数字
の1文字分である。
- 複数の文字が連なったものを文字列と言う。文字列を扱うためには、文字型の配列を使う。
- 文字型の配列に文字列を記憶させた場合、文字列のすぐあとに「\
0」が格納される。
つぎに、文字型の変数宣言とそれへの値の代入である。
- 英数字が1文字の場合
- 変数宣言
char hoge; /* 文字型の変数 */
- 代入。シングルクォーテーションで囲めば、代入演算子「=」が使える。
hoge='A'; /* 代入 */
- 英数字の文字列の場合
- 変数宣言
char hoge[10]; /* 文字型の配列 */
- 文字型の配列に文字を格納する方法はいくつかある。代表的な方
法は、「strcpy」と「sprintf」を使う方法である。ただ
し、前者を使う場合、「string.h」をインクルードする必要があ
る。
strcpy(hoge, "Akita"); /* 文字列の格納 */
sprintf(hoge, "Akita");
- 日本語の場合は、文字型の配列を使わなくてはならない。必要な配列
のサイズは、文字数である。なぜならば、日本語の1文字は2
バイトで、最後に「\0」を付加するためである。
- 変数宣言
char hoge[10]; /* 文字型の配列 */
- 文字型の配列に日本語の格納は、英数字と同じで、ダブルクォーテーションで囲む。
strcpy(hoge, "秋田"); /* 文字列の格納 */
sprintf(hoge, "秋田");
文字を取り扱う場合の入出力関数を表
1に示す。これらの関数を
使う場合、以下の注意が必要である。
- 「gets」は改行を除去し、「puts」は改行を付加する。
- 「fgets」は改行を残し、「fputs」は改行を付加しない。
- 「fscanf」では、空白文字(英数字のスペース)は読み込めない。
それは、文字列の区切りを表すからである。
表 1:
入出力に用いられる関数
|
標準 |
ファイル |
|
1文字 |
1行 |
書式付き |
1文字 |
1行 |
書式付き |
入力 |
getchar |
gets |
scanf |
fgetc |
fgets |
fscanf |
出力 |
putchar |
puts |
printf |
fputc |
fputs |
fprintf |
文字処理のための表
2、文字列処理のための表
3の標準ライブラリー関数について学習した。
表 2:
1文字処理関関数。#include <ctype.h>が必要。変数は、int c;。
関数名 |
動作 |
isalnum(c) |
英数字なら真 |
isalpha(c) |
英文字なら真 |
iscntrl(c) |
制御文字なら真 |
isdigit(c) |
数字なら真 |
isgraph(c) |
印字可能文字なら真 |
islower(c) |
小文字なら真 |
isprint(c) |
空白以外の印字可能文字なら真 |
ispunct(c) |
区切り文字なら真 |
isspace(c) |
空白類文字なら真 |
isupper(c) |
大文字なら真 |
isxdigit(c) |
16進表示文字なら真 |
tolower(c) |
文字cを小文字に変換 |
toupper(c) |
文字cを大文字に変換 |
表 3:
文字列処理関関数。#include <string.h>が必要。変数は、char
s1[256],s2[256];のように文字型の配列。配列のサイズは、処理に必要なサイズより
も大きいこと(256とは限らない)。cは文字型の変数、char c;である。
関数名 |
動作 |
strlen(s1) |
文字列s1の長さ、すなわち文字数を整数値返す。 |
strcpy(s1,s2) |
s1に、文字列s2をコピーする。 |
strcat(s1,s2) |
文字列s1の後に、文字列s2をコピーする。 |
strcmp(s1,s2) |
文字列s1とs2を比較する。 |
|
s1 > s2 の場合、戻り値は正 |
|
s1 == s2 の場合、戻り値は0 |
|
s1 < s2 の場合、戻り値は負 |
strncpy(s1,s2,n) |
s1に文字列s2の先頭からn文字をコピーする。 |
strncat(s1,s2,n) |
文字列s1の後にと文字列s2の先頭からn文字を連結する。 |
strncmp(s1,s2,n) |
文字列s1と文字列s2の先頭からn文字を比較する。比較の
結果は、srcmpと同じ。 |
strchr(s1,c) |
文字列s1の中の文字cの位置を整数で返す。文字がないときは、
NULLを返す。 |
strstr(s1,s2) |
文字列S1の中にある文字列S1の位置を整数で返す。もし、文字
列がない場合、NULLを返す。 |
この表を憶える必要は全くない。学年末試験の時には、この表は参考資料として添付する。
ただ、この表の関数を使うためには、
<ctype.h>や
<string.h>をインクルード
する必要があることは理解して欲しい。
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成17年2月20日