vlambda博客
学习文章列表

C语言标准库系列之 - <ctype.h>

C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。

这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。

如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。

库函数

下面列出了头文件 ctype.h 中定义的函数:

序号 函数 & 描述
1 int isalnum(int c) 该函数检查所传的字符是否是字母和数字。
2 int isalpha(int c) 该函数检查所传的字符是否是字母。
3 int iscntrl(int c) 该函数检查所传的字符是否是控制字符。
4 int isdigit(int c) 该函数检查所传的字符是否是十进制数字。
5 int isgraph(int c) 该函数检查所传的字符是否有图形表示法。
6 int islower(int c) 该函数检查所传的字符是否是小写字母。
7 int isprint(int c) 该函数检查所传的字符是否是可打印的。
8 int ispunct(int c) 该函数检查所传的字符是否是标点符号字符。
9 int isspace(int c) 该函数检查所传的字符是否是空白字符。
10 int isupper(int c) 该函数检查所传的字符是否是大写字母。
11 int isxdigit(int c) 该函数检查所传的字符是否是十六进制数字。

实例

下面的实例演示了 isalnum() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'd';
    int var2 = '2';
    int var3 = '\t';
    int var4 = ' ';
     
    if( isalnum(var1) )
    {
       printf("var1 = |%c| 是字母数字\n", var1 );
    }
    else
    {
       printf("var1 = |%c| 不是字母数字\n", var1 );
    }
    if( isalnum(var2) )
    {
       printf("var2 = |%c| 是字母数字\n", var2 );
    }
    else
    {
       printf("var2 = |%c| 不是字母数字\n", var2 );
    }
    if( isalnum(var3) )
    {
       printf("var3 = |%c| 是字母数字\n", var3 );
    }
    else
    {
       printf("var3 = |%c| 不是字母数字\n", var3 );
    }
    if( isalnum(var4) )
    {
       printf("var4 = |%c| 是字母数字\n", var4 );
    }
    else
    {
       printf("var4 = |%c| 不是字母数字\n", var4 );
    }
 
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |d| 是字母数字
 var2 = |2| 是字母数字
 var3 = | | 不是字母数字
 var4 = | | 不是字母数字

下面的实例演示了 isalpha() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'd';
    int var2 = '2';
    int var3 = '\t';
    int var4 = ' ';
     
    if( isalpha(var1) )
    {
      printf("var1 = |%c| 是一个字母\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 不是一个字母\n", var1 );
    }
    if( isalpha(var2) )
    {
      printf("var2 = |%c| 是一个字母\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 不是一个字母\n", var2 );
    }
    if( isalpha(var3) )
    {
      printf("var3 = |%c| 是一个字母\n", var3 );
    }
    else
    {
      printf("var3 = |%c| 不是一个字母\n", var3 );
    }
    if( isalpha(var4) )
    {
      printf("var4 = |%c| 是一个字母\n", var4 );
    }
    else
    {
      printf("var4 = |%c| 不是一个字母\n", var4 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |d| 是一个字母
 var2 = |2| 不是一个字母
 var3 = | | 不是一个字母
 var4 = | | 不是一个字母


下面的实例演示了 iscntrl() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main ()
 {
    int i = 0, j = 0;
    char str1[] = "all \a about \t programming";
    char str2[] = "w3cschool \n tutorials";
   
    /* 输出字符串直到控制字符 \a */
    while( !iscntrl(str1[i]) )
    {
       putchar(str1[i]);
       i++;
    }
   
    /* 输出字符串直到控制字符 \n */
    while( !iscntrl(str2[j]) )
    {
       putchar(str2[j]);
       j++;
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 all w3cschool 

下面的实例演示了 isdigit() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'h';
    int var2 = '2';
     
    if( isdigit(var1) )
    {
      printf("var1 = |%c| 是一个数字\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 不是一个数字\n", var1 );
    }
    if( isdigit(var2) )
    {
      printf("var2 = |%c| 是一个数字\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 不是一个数字\n", var2 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |h| 不是一个数字
 var2 = |2| 是一个数字

下面的实例演示了 isgraph() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = '3';
    int var2 = 'm';
    int var3 = ' ';
     
    if( isgraph(var1) )
    {
        printf("var1 = |%c| 是可打印的\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 是不可打印的\n", var1 );
    }
    if( isgraph(var2) )
    {
        printf("var2 = |%c| 是可打印的\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 是不可打印的\n", var2 );
    }
    if( isgraph(var3) )
    {
        printf("var3 = |%c| 是可打印的\n", var3 );
    }
    else
    {
      printf("var3 = |%c| 是不可打印的\n", var3 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |3| 是可打印的
 var2 = |m| 是可打印的
 var3 = | | 是不可打印的

下面的实例演示了 islower() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'Q';
    int var2 = 'q';
    int var3 = '3';
     
    if( islower(var1) )
    {
        printf("var1 = |%c| 是小写字母\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 不是小写字母\n", var1 );
    }
    if( islower(var2) )
    {
        printf("var2 = |%c| 是小写字母\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 不是小写字母\n", var2 );
    }
    if( islower(var3) )
    {
        printf("var3 = |%c| 是小写字母\n", var3 );
    }
    else
    {
      printf("var3 = |%c| 不是小写字母\n", var3 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |Q| 不是小写字母
 var2 = |q| 是小写字母
 var3 = |3| 不是小写字母

下面的实例演示了 isprint() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'k';
    int var2 = '8';
    int var3 = '\t';
    int var4 = ' ';
     
    if( isprint(var1) )
    {
      printf("var1 = |%c| 是可打印的\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 是不可打印的\n", var1 );
    }
    if( isprint(var2) )
    {
      printf("var2 = |%c| 是可打印的\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 是不可打印的\n", var2 );
    }
    if( isprint(var3) )
    {
      printf("var3 = |%c| 是可打印的\n", var3 );
    }
    else
    {
      printf("var3 = |%c| 是不可打印的\n", var3 );
    }
    if( isprint(var4) )
    {
      printf("var4 = |%c| 是可打印的\n", var4 );
    }
    else
    {
      printf("var4 = |%c| 是不可打印的\n", var4 );
    }
   
    return(0);
 }  

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |k| 是可打印的
 var2 = |8| 是可打印的
 var3 = || 是不可打印的
 var4 = | | 是可打印的

下面的实例演示了 ispunct() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 't';
    int var2 = '1';
    int var3 = '/';
    int var4 = ' ';
 
    if( ispunct(var1) )
    {
        printf("var1 = |%c| 是标点符号字符\n", var1 );
    }
    else
    {
        printf("var1 = |%c| 不是标点符号字符\n", var1 );
    }
    if( ispunct(var2) )
    {
        printf("var2 = |%c| 是标点符号字符\n", var2 );
    }
    else
    {
        printf("var2 = |%c| 不是标点符号字符\n", var2 );
    }
    if( ispunct(var3) )
    {
        printf("var3 = |%c| 是标点符号字符\n", var3 );
    }
    else
    {
        printf("var3 = |%c| 不是标点符号字符\n", var3 );
    }
    if( ispunct(var4) )
    {
        printf("var4 = |%c| 是标点符号字符\n", var4 );
    }
    else
    {
        printf("var4 = |%c| 不是标点符号字符\n", var4 );
    }
   
    return(0);
 }  

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |t| 不是标点符号字符
 var2 = |1| 不是标点符号字符
 var3 = |/| 是标点符号字符
 var4 = | | 不是标点符号字符

下面的实例演示了 isspace() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 't';
    int var2 = '1';
    int var3 = ' ';
 
    if( isspace(var1) )
    {
        printf("var1 = |%c| 是空白字符\n", var1 );
    }
    else
    {
        printf("var1 = |%c| 不是空白字符\n", var1 );
    }
    if( isspace(var2) )
    {
        printf("var2 = |%c| 是空白字符\n", var2 );
    }
    else
    {
        printf("var2 = |%c| 不是空白字符\n", var2 );
    }
    if( isspace(var3) )
    {
        printf("var3 = |%c| 是空白字符\n", var3 );
    }
    else
    {
        printf("var3 = |%c| 不是空白字符\n", var3 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |t| 不是空白字符
 var2 = |1| 不是空白字符
 var3 = | | 是空白字符

下面的实例演示了 isupper() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int var1 = 'M';
    int var2 = 'm';
    int var3 = '3';
     
    if( isupper(var1) )
    {
      printf("var1 = |%c| 是大写字母\n", var1 );
    }
    else
    {
      printf("var1 = |%c| 不是大写字母\n", var1 );
    }
    if( isupper(var2) )
    {
      printf("var2 = |%c| 是大写字母\n", var2 );
    }
    else
    {
      printf("var2 = |%c| 不是大写字母\n", var2 );
    }  
    if( isupper(var3) )
    {
      printf("var3 = |%c| 是大写字母\n", var3 );
    }
    else
    {
      printf("var3 = |%c| 不是大写字母\n", var3 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |M| 是大写字母
 var2 = |m| 不是大写字母
 var3 = |3| 不是大写字母

下面的实例演示了 isxdigit() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    char var1[] = "tuts";
    char var2[] = "0xE";
   
    if( isxdigit(var1[0]) )
    {
      printf("var1 = |%s| 是十六进制数字\n", var1 );
    }
    else
    {
      printf("var1 = |%s| 不是十六进制数字\n", var1 );
    }
   
    if( isxdigit(var2[0] ))
    {
      printf("var2 = |%s| 是十六进制数字\n", var2 );
    }
    else
    {
      printf("var2 = |%s| 不是十六进制数字\n", var2 );
    }
   
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 var1 = |tuts| 不是十六进制数字
 var2 = |0xE| 是十六进制数字

标准库还包含了两个转换函数,它们接受并返回一个 "int"

序号 函数 & 描述
1 int tolower(int c) 该函数把大写字母转换为小写字母。
2 int toupper(int c) 该函数把小写字母转换为大写字母。

下面的实例演示了 tolower() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int i = 0;
    char c;
    char str[] = "W3CSCHOOL TUTORIALS";
 
    while( str[i] )
    {
      putchar(tolower(str[i]));
      i++;
    }
 
    return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 w3cschool tutorials

下面的实例演示了 toupper() 函数的用法。

 #include <stdio.h>
 #include <ctype.h>
 
 int main()
 {
    int i = 0;
    char c;
    char str[] = "W3Cschool Tutorials";
   
    while(str[i])
    {
      putchar (toupper(str[i]));
      i++;
    }
   
  return(0);
 }

让我们编译并运行上面的程序,这将产生以下结果:

 W3CSCHOOL TUTORIALS

字符类

序号 字符类 & 描述
1 数字 完整的数字集合 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
2 十六进制数字 集合 { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f }
3 小写字母 集合 { a b c d e f g h i j k l m n o p q r s t u v w x y z }
4 大写字母 集合 {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
5 字母 小写字母和大写字母的集合
6 字母数字字符 数字、小写字母和大写字母的集合
7 标点符号字符 集合 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
8 图形字符 字母数字字符和标点符号字符的集合
9 空格字符 制表符、换行符、垂直制表符、换页符、回车符、空格符的集合。
10 可打印字符 字母数字字符、标点符号字符和空格字符的集合。
11 控制字符 在 ASCII 编码中,这些字符的八进制代码是从 000 到 037,以及 177(DEL)。
12 空白字符 包括空格符和制表符。
13 字母字符 小写字母和大写字母的集合。

最编,懂编程,更懂世界