コンテンツにスキップ

C言語/標準ライブラリ/ctype.h

出典: フリー教科書『ウィキブックス(Wikibooks)』

ヘッダー<ctype.h> は、文字の分類やマッピングに役立ついくつかの関数を宣言しています[1][2]

ここで宣言する関数はのすべての引数はintで、その値はunsigned charとして表現可能であるか、またはマクロEOFの値と等しくなければなりません(それ以外の値の場合、動作は未定義( undefined )です)。 これらの関数の動作は、現在のロケールの影響を受けます。 "C" ロケールでない場合にのみロケール固有の側面を持つ関数を以下に示します。

印刷文字
表示装置の1つの印刷位置を占めるローカル固有の文字の集合の一つ
制御文字
印刷文字ではないローカル固有の文字の集合の一つ

すべての文字と数字は印刷文字です。

文字操作関数の一覧
形式 機能[3]
文字種分類関数(文字が以下のとき真、それ以外の時は偽を返す)
int isalnum(int c); 英数字('A'~'Z', 'a'~'z', '0'~'9')
int isalpha(int c); 英文字('A'~'Z', 'a'~'z')
int isblank(int c); 標準ブランク文字(' ', "\t")
int iscntrl(int c); 制御文字(0x00~0x1f, 0x7f)
int isdigit(int c); 数字('0'~'9')
int isgraph(int c); 空白(' ')を除く表示文字(0x21~0x7e)
int islower(int c); 英小文字('a'~'z')
int isprint(int c); 空白(' ')を含む表示文字(0x20~0x7e)
int ispunct(int c); 区切り文字(0x21~0x2f, 0x3a~0x40, 0x5b~0x60, 0x7b~0x7e)
int isspace(int c); 標準空白類文字(' ', '\f', '\n', '\r', '\t', '\v')
int isupper(int c); 英大文字('A'~'Z')
int isxdigit(int c); 16進数字('0'~'9', 'A'~'F', 'a'~'f')
大文字小文字変換関数
int tolower(int c); 文字cを小文字に変換した値を返す。
int toupper(int c); 文字cを大文字に変換した値を返す。

文字種分類関数

[編集]

文字種分類関数( Character classification functions )は、引数 c の値が関数の説明にある値と一致する場合に限り、0以外の値(真)を返します[4][5]

isalnum関数

[編集]
形式
#include <ctype.h>
int isalnum(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが英数字('A'~'Z', 'a'~'z', '0'~'9')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <stdio.h>
#include <ctype.h>

int main(void) {
	printf("文字を入力してください:");
	int c = getchar();
	if (isalnum(c))
		printf("%cは英数字です。", c);
	else
		printf("%cは英数字ではありません。", c);
}

isalpha関数

[編集]
形式
#include <ctype.h>
int isalpha(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが英文字('A'~'Z', 'a'~'z')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isalnum(c))
    printf("%cは英数字です。", c);
  else
    printf("%cは英数字ではありません。", c);
}

isblank関数

[編集]
形式
#include <ctype.h>
int isblank(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが標準ブランク文字(' ', "\t")の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <stdio.h>
#include <ctype.h>

int main(void)
{
	printf("文字を入力してください:");
	int c = getchar();
	if (isblank(c))
		printf("%cは標準ブランク文字です。", c);
	else
		printf("%cは標準ブランク文字ではありません。", c);
	
}

iscntrl関数

[編集]
形式
#include <ctype.h>
int iscntrl(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが制御文字(0x00~0x1f, 0x7f)の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  int c;
  printf("文字を入力してください:");
  int c = getchar();
  if (isctrl(c))
    printf("%cは制御文字です。", c);
  else
    printf("%cは制御文字ではありません。", c);
}

isdigit関数

[編集]
形式
#include <ctype.h>
int isdigit(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが数字('0'~'9')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isdigit(c))
    printf("%cは数字です。", c);
  else
    printf("%cは数字ではありません。", c);
}

isgraph関数

[編集]
形式
#include <ctype.h>
int isgraph(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが空白(' ')を除く表示文字(0x21~0x7e)の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {

  printf("文字を入力してください:");
  int c = getchar();
  if (isgraph(c))
    printf("%cは表示文字(空白を除く)です。", c);
  else
    printf("%cは表示文字(空白を除く)ではありません。", c);
}

islower関数

[編集]
形式
#include <ctype.h>
int islower(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが英小文字('a'~'z')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {

  printf("文字を入力してください:");
  int c = getchar();
  if (islower(c))
    printf("%cは英小文字です。", c);
  else
    printf("%cは英小文字ではありません。", c);
}

isprint関数

[編集]
形式
#include <ctype.h>
int isprint(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが空白(' ')を含む表示文字(0x20~0x7e)の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isprint(c))
    printf("%cは表示文字(空白を含む)です。", c);
  else
    printf("%cは表示文字(空白を含む)ではありません。", c);
}

ispunct関数

[編集]
形式
#include <ctype.h>
int ispunct(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが区切り文字(0x21~0x2f, 0x3a~0x40, 0x5b~0x60, 0x7b~0x7e)の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {

  printf("文字を入力してください:");
  int c = getchar();
  if (ispunct(c))
    printf("%cは区切り文字です。", c);
  else
    printf("%cは区切り文字ではありません。", c);
}

isspace関数

[編集]
形式
#include <ctype.h>
int isspace(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが標準空白類文字(' ', '\f', '\n', '\r', '\t', '\v')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isspace(c))
    printf("%cは標準空白類文字です。", c);
  else
    printf("%cは標準空白類文字ではありません。", c);
}

isupper関数

[編集]
形式
#include <ctype.h>
int isupper(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが英大文字('A'~'Z')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isupper(c))
    printf("%cは英大文字です。", c);
  else
    printf("%cは英大文字ではありません。", c);
}

isxdigit関数

[編集]
形式
#include <ctype.h>
int isxdigit(int c);
引数
c 判定する文字
返却値
判定の結果
機能
文字cが16進数字('0'~'9', 'A'~'F', 'a'~'f')の場合真(0以外の値)を返し、それ以外の場合偽(0)を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  if (isxdigit(c))
    printf("%cは16進数字です。", c);
  else
    printf("%cは16進数字ではありません。", c);
}

大文字小文字変換関数

[編集]

大文字小文字変換関数( Character case mapping functions )は、変換条件に合致する文字に置き換える。 変換条件に合致する文字は、Locale によっては複数が該当する可能性があるが、同じ Locale の場合、常に同じ値を返す[6][7]

tolower関数

[編集]
形式
#include <ctype.h>
int tolower(int c);
引数
c 変換する文字
返却値
変換の結果の文字
機能
文字cが大文字の場合、小文字に変換した値を返す。文字cが大文字以外の場合、変換せずにそのままの値を返す。
#include <stdio.h>
#include <ctype.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  printf("%cは小文字にすると%cです。", c, tolower(c));
}

toupper関数

[編集]
形式
#include <ctype.h>
int toupper(int c);
引数
c 変換する文字
返却値
変換の結果の文字
機能
文字cが小文字の場合、大文字に変換した値を返す。文字cが小文字以外の場合、変換せずにそのままの値を返す。
#include <ctype.h>
#include <stdio.h>

int main(void) {
  printf("文字を入力してください:");
  int c = getchar();
  printf("%cは大文字にすると%cです。", c, toupper(c));
}

脚注

[編集]
  1. ^ N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 200, §7.4 Character handling <ctype.h>. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  2. ^ 『JISX3010:2003』p.135「7.4 文字操作<ctype.h>」
  3. ^ '( )'の中は参考(locale によって変わりうるものもある)
  4. ^ N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 200, §7.4.1 Character classification functions. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  5. ^ 『JISX3010:2003』p.136「7.4.1 文字種分類関数」
  6. ^ N1570 Committee Draft — April 12, 2011 ISO/IEC 9899:201x. ISO/IEC. p. 170, §7.4.2 Character case mapping functions. http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf. 
  7. ^ 『JISX3010:2003』p.138「7.4.2 大文字小文字変換関数」

参考文献

[編集]