文字列の判定と変換

英数字・英字判定

isalnum.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
  ctype.h [isalnum] (alpha + num)
  
  書式: int isalnum(int c)
  機能: 英数字を判定
  引数:	int c: 判定する文字
  戻り値: 英数字 (A~Z, a~z, 0~9) であれば, 0 以外を返し (!= 0)
          英数字でなければ, 0 を返す.
*/

/*
  ctype.h [isalpha] (alpha)
  
  書式: int isalpha(int c)
  機能: 英字を判定
  引数:	int c: 判定する文字
  戻り値: 英字 (A~Z, a~z) であれば, 0 以外を返し (!= 0)
          英字でなければ, 0 を返す.
*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("英文字と数値を残す: ");
  for(i = 0; i < 15; i++){
    if( isalnum(str[i]) != 0 )
      printf("%c", str[i]);
  }

  printf("\n英文字だけを残す: ");
  for(i = 0; i < 15; i++){
    if( isalpha(str[i]) != 0 )
      printf("%c", str[i]);
  }
  printf("\n");

  return 0;
}

isalnum.c の実行結果は:

[cactus:~/code_c/refer]% ./isalnum
英文字と数値を残す: AaBb123Cc
英文字だけを残す: AaBbCc

数値・16 進数判定

isdigit.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
  ctype.h [isdigit] (num)
  
  書式: int isdigit(int c)
  機能: 数値判定
  引数:	int c: 判定する文字
  戻り値: 数値 (0~9) であれば, 0 以外を返し (!= 0)
          数値でなげらば, 0 を返す.
*/

/*
  ctype.h [isxdigit] (16進数)
  
  書式: int isdigit(int c)
  機能:16 進数を判定
  引数:	int c: 判定する文字
  戻り値: 16 進数 (0~9, A~F, a~f) であれば, 0 以外を返し (!= 0)
          16 進数でなければ, 0 を返す.
*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("数値を残す: ");
  for(i = 0; i < 15; i++){
    if( isdigit(str[i]) != 0 )
      printf("%c", str[i]);
  }

  printf("\n16 進数だけを残す: ");
  for(i = 0; i < 15; i++){
    if( isxdigit(str[i]) != 0 )
      printf("%c", str[i]);
  }
  printf("\n");

  return 0;
}

isdigit.c の実行結果は:

[cactus:~/code_c/refer]% ./isdigit
数値を残す: 123
16 進数だけを残す: AaBb123Cc

大文字・小文字判定

isupper.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
  ctype.h [isupper]
  
  書式: int isupper(int c)
  機能: 大文字を判定
  引数:	int c: 判定する文字
  戻り値: 大文字 (A~Z) であれば, 0 以外を返し (!= 0)
          大文字でなげらば, 0 を返す.
*/

/*
  ctype.h [islower]
  
  書式: int islower(int c)
  機能: 小文字を判定
  引数:	int c: 判定する文字
  戻り値: 小文字 (a~z) であれば, 0 以外を返し (!= 0)
          小文字でなければ, 0 を返す.
*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("大文字だけを残す: ");
  for(i = 0; i < 15; i++){
    if( isupper(str[i]) != 0 )
      printf("%c", str[i]);
  }

  printf("\n小文字だけを残す: ");
  for(i = 0; i < 15; i++){
    if( islower(str[i]) != 0 )
      printf("%c", str[i]);
  }
  printf("\n");

  return 0;
}

isupper.c の実行結果は:

[cactus:~/code_c/refer]% ./isupper
大文字だけを残す: ABC
小文字だけを残す: abc

空白・記号・制御文字判定

isspace.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
  ctype.h [isspace]
  
  書式: int isspace(int c)
  機能: 空白を判定
  引数:	int c: 判定する文字
  戻り値:
          空白     (0x20), 水平タブ (0x09),
          垂直タブ (0x0B), 改行     (0x0A),
	  復帰     (0x0D), 改頁     (0x0C)
	  
          であれば, 0 以外を返し (!= 0)
          そうでなげらば, 0 を返す.
*/

/*
  ctype.h [ispunct]
  
  書式: int ispunct(int c)
  機能: 記号を判定
  引数:	int c: 判定する文字
  戻り値: 記号(
          0x21 ~ 0x2F, 0x3A ~ 0x40,
	  0x5B ~ 0x60, 0x7B ~ 0x7E
	  )
          であれば, 0 以外を返し (!= 0)
          記号でなければ, 0 を返す.
*/

/*
  ctype.h [iscntrl]
  
  書式: int iscntrl(int c)
  機能: 制御文字を判定
  引数:	int c: 判定する文字
  戻り値: 制御文字(
          0x00 ~ 0x1F, 0x7F
	  )
          であれば, 0 以外を返し (!= 0)
          制御文字でなければ, 0 を返す.
*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  int space_num = 0;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("記号だけを残す: ");
  for(i = 0; i < 15; i++){
    if( ispunct(str[i]) != 0 )
      printf("%c", str[i]);
  }

  printf("\n空白の数: ");
  for(i = 0; i < 15; i++){
    if( isspace(str[i]) != 0 )
      space_num++;
  }
  printf("%d\n", space_num);

  return 0;
}

isspace.c の実行結果は:

[cactus:~/code_c/refer]% ./isspace
記号だけを残す: -*
空白の数: 3

表示文字判定

isprint

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
  ctype.h [isprint]
  
  書式: int isprint(int c)
  機能: 空白を含む, 表示文字判定
  引数:	int c: 判定する文字
  戻り値: 表示文字 (0x20 ~ 0x7E)
          であれば, 0 以外を返し (!= 0)
          表示文字でなげらば, 0 を返す.
*/

/*
  ctype.h [isgraph]
  
  書式: int isgraph(int c)
  機能: 空白を除く, 表示文字判定
  引数:	int c: 判定する文字
  戻り値: 表示文字 (0x21 ~ 0x7E)
          であれば, 0 以外を返し (!= 0)
          表示文字でなげらば, 0 を返す.

*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("空白を含む表示文字を残す: ");
  for(i = 0; i < 15; i++){
    if( isprint(str[i]) != 0 )
      printf("%c", str[i]);
  }

  printf("\n空白を除く表示文字だけを残す: ");
  for(i = 0; i < 15; i++){
    if( isgraph(str[i]) != 0 )
      printf("%c", str[i]);
  }
  printf("\n");

  return 0;
}

isprint.c の実行結果は:

[cactus:~/code_c/refer]% ./isprint
空白を含む表示文字を残す: Aa Bb 1-2*3 Cc
空白を除く表示文字だけを残す: AaBb1-2*3Cc

大文字・小文字変換

tolower

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
  ctype.h [tolower]
  
  書式: int tolower(int c)
  機能: 大文字を小文字に変換
  引数:	int c: 変換する文字
  戻り値: 大文字 (A~Z) であれば, 小文字に変換した値を返し (!= 0)
          大文字でなければ, 無変換のまま返す.
*/

/*
  ctype.h [toupper]
  
  書式: int toupper(int c)
  機能: 小文字を大文字に変換
  引数:	int c: 変換する文字
  戻り値: 小文字 (a~z) であれば, 大文字に変換した値を返し,
          小文字でなければ, 無変換のままを返す.
*/

#include <stdio.h>
#include <ctype.h>

int main(void){
  int i;
  char str[] = "Aa Bb 1-2*3 Cc";

  printf("大文字を小文字に変換: ");
  for(i = 0; i < 15; i++){
    str[i] = tolower(str[i]);
  }
  printf("%s\n", str);

  printf("小文字を大文字に変換: ");
  for(i = 0; i < 15; i++){
    str[i] = toupper(str[i]);
  }
  printf("%s\n", str);

  return 0;
}

tolower.c の実行結果は:

[cactus:~/code_c/refer]% ./tolower
大文字を小文字に変換: aa bb 1-2*3 cc
小文字を大文字に変換: AA BB 1-2*3 CC