分类函数

ASCII字符可以分为英文字母、数字、控制字符、空白字符、大小写字母以及标点符号,分类是指对字符进行属性判定,判断字符属于哪些范畴,这些属性的判定在程序中非常常见,尤其是通信协议的字符处理部分更是必不可少。

1  字母数字

本节介绍判定字符是否是字母或者数字的相关分类函数,函数所在头文件为ctype.h,参数为需要判断的字符,下面不再作特别说明。

1.1  判断字符是否为英文字母isalpha()

【函数原型】int isalpha(int c)

【功能讲解】判断字符是否是英文字母,如果字符是英文字符则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程能判断用户输入字符是不是英文字母。如果输入的是英文字母则显示出来,否则提示不是英文字母,直到输入.结束本例子

/*函数isalpha()示例*/

#include <ctype.h>/*函数isalpha()所在头文件

int main(void)

{

   char ch;

   do

   {

            ch = getch();/*获取键盘输入字符*/

            if(isalpha(ch))/*判定字符是不是英文字母*/

            {

                     printf("您输入的是英文字母%c\n",ch);

            }

            else

            {

                     printf("您输入的不是英文字母!\n");

            }

   }

   while(ch != '.');/*遇到结束字符则结束本程序*/

   return ;

}

【运行结果】

输入字符a则显示:您输入的是英文字母a

输入字符f则显示:您输入的是英文字母f

输入字符F则显示:您输入的是英文字母F

输入字符.则显示:您输入的不是英文字母!

【实例讲解】本例使用简单的do…while循环语句等待用户输入字符,当用户输入后马上调用isalpha()检测是否是英文字母,给出相应的提示信息,直到输入‘.’结束本例子。

1.2  判断字符是否为数字isdigit()

【函数原型】int isdigit(int c)

【功能讲解】判断字符是否是数字,如果字符是数字则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程判断数组中哪些字符是数字字符,不是数字的不做任何处理,如果是数字字符分行显示到屏幕。

/*函数isdigit()示例*/

#include <ctype.h>                              /*函数isdigit()所在的头文件*/

int main()

{

         char str[]="123kal*(0-#";              /*任意初始化一个字符数组,包括数字*/

         int i;

         /*使用for循环逐个检测*/

         for (i=;str[i]!=;i++)

         {

                  if(isdigit(str[i]))                     /*判断是否是数字*/

                  {

                          printf("%c 是数字\n",str[i]);                  /*输出数字字符*/

                  }

         }

         return ;

}

【运行结果】

1 是数字

2 是数字

3 是数字

0 是数字

【实例讲解】本例首先是随意初始化一个字符数组,里面填写入数字、标点符号、英文字母等,然后是否for循环逐个调用isdigit()判断是否是数字,程序会列出数组中所有的数字字符。

1.3  判断字符是否为英文字母或数字isalnum()

【函数原型】int isalnum(int c)

【功能讲解】判断字符是否是英文字母或者数字,如果字符是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程是逐个判断字符数组中所有的字符,如果是数字或者英文字母,则显示到屏幕,如果不是,则不作任何处理。

/*函数isalnum()示例*/

#include <ctype.h>                                       /*函数isalnum()所在的头文件*/

int main()

{

         char str[]="123kal*(0-#10";                   /*初始化一个包含数字的字符数组*/

         int i;

         /*循环判定*/

         for (i=;str[i]!=;i++)

         {

                  if(isalnum(str[i]))                         /*判断是字母或者数字*/

                  {

                          printf("%c ",str[i]);              /*把相应的字符显示出来*/

                  }

         }

         printf("是英文字母或数字\n");

         return ;

}

【运行结果】

123kal010 是英文字母和数字

【实例讲解】本例首先是随意初始化一个字符数组,里面填写入英文字母和数字,当然也包含其他字符,然后是否for循环逐个调用isalnum()判断是否是英文字母或数字,程序会列出数组中所有的判断为真的字符,在循环结束后再显示一段说明文字,告诉用户那些就是英文字符和数字。

1.4  判断字符是否为小写字母islower()

【函数原型】int islower(int c)

【功能讲解】判断字符是否是小写字母,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程能判定用户输入的字符是否是小写字母,运行的效果是只显示用户输入的小写字母,输入其他字符不显示,按Esc结束程序。

/*函数islower()示例*/

#include<ctype.h>                       /*函数islower()所在头文件*/

int main(void)

{

         char ch;                              /*定义字符变量*/

         do//循环

         {

                  ch = getch();              /*获取键盘输入*/

                  if(islower(ch))            /*判断是否是小写字母*/

                  {

                          printf("%c\n",ch);               /*显示出字符*/

                  }

         }

         while(ch != );                   /*遇到Esc退出本程序*/

         return ;                              /*函数返回*/

}

【运行结果】

输入1:无显示

输入7:无显示

输入A:无显示

输入 a:  a

输入g:  g

【实例讲解】例子中使用do…while循环语句检测输入的字符是不是小写字母,如果是则显示出来,不是小写字母的没做处理,就像是用户不能输入小写字母以外的字符一样。

1.5  判断字符是否为大写字母isupper()

【函数原型】int isupper(int c)

【功能讲解】判断字符是否是大写字母,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程能判定用户输入的字符是否是大写字母,运行的效果是只显示用户输入的大写字母,输入其他字符不显示,按Esc结束程序。

/*函数isupper()示例*/

#include<ctype.h>     /*函数isupper()所在头文件*/

int main(void)

{

         char ch;             /*定义字符变量*/

         do                      /*循环*/

         {

                  ch = getch();                       /*获取键盘输入*/

                  if(isupper(ch))                     /*判断是否是大写字母*/

                  {

                          printf("%c\n",ch);      /*显示出字符*/

                  }

         }

         while(ch != );                           /*遇到Esc退出本程序*/

         return ;/*函数返回*/

}

【运行结果】

输入1:无显示

输入7:无显示

输入A:A

输入 a:无显示

输入g: 无显示

【实例讲解】例子中使用do…while循环语句检测输入的字符是不是大写字母,如果是则显示出来,不是大写字母的没做处理,就像是用户不能输入大写字母以外的字符一样。

2  字符

本节介绍如何使用函数判定字符是否是ASCII码、普通控制字符、标点符号、可打印、空白字符(包括空格、水平制表符、回车符、走纸换行、垂直制表符以及换行符)。

2.1  判断字符是否为ASCII码isascii()

【函数原型】int isascii(int c)

【功能讲解】判断字符是否是ASCII码,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程能判定用户输入的是否是ASCII码,并显示出其对应的字符和ASCII码值,按Esc结束程序。

/*函数isascii()示例*/

#include<ctype.h>//函数isascii()所在头文件

int main(void)

{

         /*定义字符变量*/

         char ch;

         do/*循环*/

         {

                  /*获取键盘输入*/

                  ch = getch();

                  /*判断是否是ASCII码*/

                  if(isascii(ch))

                  {

                          /*显示出字符和对应的ASCII值*/

                          printf("%c 是ASCII码,对应数值为%d\n",ch,ch);

                  }

         }

         /*遇到Esc退出本程序*/

         while(ch != );

         /*函数返回*/

         return ;

}

【运行结果】

输入字符Q显示:Q是ASCII码,对应的数值为81

输入字符q显示:q是ASCII码,对应的数值为113

输入字符a显示:a是ASCII码,对应的数值为97

输入字符2显示:2是ASCII码,对应的数值为50

输入字符3显示:3是ASCII码,对应的数值为51

【实例讲解】ASCII码是美国标准信息交换码(American Standard Code for Information Interchange),字母和各种字符必须按照特定的规则用二进制编码才能在计算机中表示。编码方式可以有很多种,ASCII码是其中最常见的一种。标准ASCII码用七位二进制编码,有128个。例子使用do…while循环检测每一个输入的字符,如果是ASCII码则显示出对应的数值,直到遇到按键盘“ESC”退出本程序。

2.2  判断字符是否为控制字符iscntrl()

【函数原型】int iscntrl(int c)

【功能讲解】判断字符是否是控制字符,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】因为控制字符一般是不可显示的,所以使用控制字符的ASCII码值初始化一个数组,判定该码值对应的字符是否是控制字符并显示出来。

/*函数iscntrl()示例

判定字符是否是控制字符并显示出来。

*/

#include<ctype.h>/*函数iscntrl()所在头文件*/

int main(void)

{

         /*定义字符变量*/

         char ch[] = {0x00,0x01,0x1f,0x7f};

         /*循环*/

         int i = ;

         for(i = ;i<;i++)

         {

                  /*判断是否是控制码*/

                  if(iscntrl(ch[i]))

                  {

                          /*显示出字符*/

                          printf("%x 是控制字符\n",ch[i]);

                  }

                  else

                  {

                          printf("%x 不是控制字符\n",ch[i]);

                  }

         }

         /*函数返回*/

         return ;

}

【运行结果】

0 是控制字符

1 是控制字符

1f 是控制字符

7f 是控制字符

【实例讲解】控制字符是表示某一控制功能的字符,一般出现在特定的信息文本中。字符数值在0x00-0x1f之间,0x7f也是。本程序就是随意在这些数值中挑选几个用iscntrl()判定,如果你调试本例子可以自选数值试验。

2.3  判断字符是否为可打印字符(不含空格)isgraph()

【函数原型】int isgraph(int c)

【功能讲解】判断字符是否是不为空格的可打印字符,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】判断字符数组中哪些字符是否是不为空格的可打印字符,如果是则显示该字符可打印,否则显示该字符不可打印。

/*函数isgraph()示例

判定字符是否是控制字符(不含空格)并显示出来。

*/

#include<ctype.h>/*函数isgraph()所在头文件*/

int main(void)

{

         /*定义字符变量*/

         char ch[] = "&^d 45";

         /*循环*/

         int i = ;

         for(i = ;ch[i]!=;i++)

         {

                  /*判断是否是可打印字符(不含空格)*/

                  if(isgraph(ch[i]))

                  {

                          /*显示出字符*/

                          printf("%c 是可打印字符\n",ch[i]);

                  }

                  else

                  {

                          printf("%c 不是可打印字符\n",ch[i]);

                  }

         }

         /*函数返回*/

         return ;

}

【运行结果】

& 是可打印字符

^ 是可打印字符

d 是可打印字符

不是可打印字符

4 是可打印字符

5 是可打印字符

【实例讲解】基本的ASCII字符集共有128个字符,其中有96个是可打印的,包括字母、数字、标点符号等,其他的是控制字符。本例子使用的函数即是判断字符是否是(不包含空格)可打印字符,看运行结果是不是跟你想的一样。

2.4  判断字符是否为可打印字符(含空格)isprint()

【函数原型】int isprint(int c)

【功能讲解】判断字符是否是的可打印字符,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】判断哪些字符是否是(含空格)可打印字符。

/*函数isprint()示例

判定字符是否是控制字符(含空格)并显示出来。

*/

#include<ctype.h>

int main(void)

{

         /*定义字符变量*/

         int ch[] = {'a',' ',0x30,0x7f};

         /*循环*/

         int i = ;

         for(i = ;i<;i++)

         {

                  /*判断是否是可打印字符(含空格)*/

                  if(isprint(ch[i]))

                  {

                          /*显示出字符*/

                          printf("%c 是可打印字符\n",ch[i]);

                  }

         }

         /*函数返回*/

         return ;

}

【运行结果】

a 是可打印字符

0 是可打印字符

【实例讲解】基本的ASCII字符集共有128个字符,其中有96个是可打印的,包括字母、数字、标点符号等,其他的是控制字符。本例子使用的函数即是判断字符是否是可打印字符,看运行结果是不是跟你想的一样。

2.5  判断字符是否为标点符号ispunct()

【函数原型】int ispunct(int c)

【功能讲解】判断字符是否是标点符号,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程允许用户任意输入字符,判断其是否是标点符号,如果是则显示该字符是标点符号,否则显示该字符不是标点符号。

/*函数ispunch()示例*/

#include<ctype.h>

int main(void)

{

         /*定义字符变量*/

         char ch;

         do/*循环*/

         {

                  /*获取键盘输入*/

                  ch = getch();

                  /*判断是否是标点符号*/

                  if(ispunct(ch))

                  {

                          /*显示出字符*/

                          printf("%c 是标点符号\n",ch);

                  }

                  else

                  {

                          /*显示出字符*/

                          printf("%c 不是标点符号\n",ch);

                  }

         }

         /*遇到Esc退出本程序*/

         while(ch != );

         /*函数返回*/

         return ;

}

【运行结果】

输入a显示:a不是标点符号

输入5显示:5不是标点符号

输入`显示:`是标点符号

输入!显示:!是标点符号

【实例讲解】标点符号是书面上用于标明句读和语气的符号。例子使用do…while循环检测键盘输入的字符是不是标点符号,并显示出来,直到遇到ESC退出程序。

2.6  判断字符是否为空白字符isspace()

【函数原型】int ispunct(int c)

【功能讲解】判断字符是否是空白字符,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】分析一个带空白字符的字符串,逐个检测字符是不是空白字符,如果不是则显示出来,否则不做处理。

/*函数isspace()示例*/

#include <ctype.h>

int main(void)

{

         /*字符串包含空白字符 \t表示水平制表符,\r表示回车 \n换行*/

         char str[] = "I will \t be a \r better  man!\n";

         int i=;

         /*逐个字符检测是否是空白字符*/

         for(i = ;i<strlen(str);i++)

         {

                  if(isspace(str[i]))

                  {

                          /*空白字符不显示*/

                  }

                  else

                  {

                          /*显示非空白字符*/

                          printf("%c",str[i]);

                  }

         }

         /*输出一个换行符号,输出个换行符号只是为了运行结果干净整洁,无其它意思*/

         printf("\n");

         return ;

}

【运行结果】

Iwillbeabeterrman!

【实例讲解】空白字符包括空格、水平制表符、垂直制表符、换页、回车和换行等等,本例首先定义一个字符串,故意在其中包含空白字符,然后通过for循环逐个字符检测,如果不是空白字符则显示出来,最后显示的就是除去空白字符以后的字符了。

2.7  判断字符是否为16进制字符isxdigit()

【函数原型】int isxdigit(int c)

【功能讲解】判断字符是否是16进制字符,如果是则返回非零值,否则返回零。

【参数说明】需要判断的字符。

【程序示例】本例程允许用户任意输入一个字符,使用本函数判断是不是16进制字符,显示出对应的提示信息,在最后给出了16进制包含哪里字符。

/*函数isxdigit()示例*/

#include<ctype.h>/*函数isxdigit()所在头文件*/

#include<stdio.h>

int main(void)

{

         char ch; /*定义字符变量*/

         ch = getch();/*获取键盘输入*/

         while(ch != )/*循环*/

         {

                  if(isxdigit(ch)) /*判断是否是16进制符号*/

                  {

                          printf("%c 是16进制字符\n",ch); /*显示出字符*/

                  }

                  else

                  {

                          printf("%c 不是16进制字符\n",ch); /*显示出字符*/

                  }

                  ch = getch();/*获取键盘输入*/

         }

         //while(ch != 27); /*遇到Esc退出本程序*/

         printf("16进制字符包括:0123456789ABCDEF\n"); /*显示出字符*/

         return ; /*函数返回*/

}

【运行结果】

输入字符1显示:1是16进制字符

输入字符9显示:9是16进制字符

输入字符A显示:A是16进制字符

输入字符F显示:F是16进制字符

输入字符Q显示:Q不是16进制字符

输入字符L显示:L不是16进制字符

输入ESC显示:16进制字符包括:0123456789ABCDEF

【实例讲解】16进制是计算机中数据的一种表示方法,它由0-9以及A-F组成,我们日常使用的数据是10进制的,逢10进1,而16进制则是逢16进1。这个例子跟之前的基本一样,使用while循环获取用户输入的字符,然后使用isxdigit()判断是不是16进制字符,以按下ESC键结束本程序。

这么多只是C整个库的一部分,需要全部记忆吗?现在当然不用,用到哪里去查就行了。

C语言入门9-1-分类函数的更多相关文章

  1. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  2. 小学生都看得懂的C语言入门(3): 数组与函数

    #include <stdio.h> int main() { int x; ; ; scanf("%d",&x){ sum+=x; cnt++; scanf( ...

  3. C语言入门:05.scanf函数

    一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”

  4. go语言入门(4)函数

    1,函数的定义格式 函数构成代码执行的逻辑结构.在Go语言中,函数的基本组成为:关键字func.函数名.参数列表.返回值.函数体和返回语句. Go 语言函数定义格式如下 func FuncName(/ ...

  5. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  6. R语言入门视频笔记--6--R函数之cat、format、switch函数

    一.cat 猫  怎么就变成一个输出函数了呢? cat  一个输出函数,功能和print有相同之处 我们一起比较看看 1.cat(“hellow world”)或cat('hellow world') ...

  7. C语言入门(7)——自定义函数

    C源程序是由函数组成的.虽然在C语言入门系列前面几篇的程序中大都只有一个主函数main(),但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能.C语言中的函数相 ...

  8. 【C语言入门教程】1.2 函数库 和 链接

    程序员可以不需要从头开始设计每一个函数,完成用C语言命令所实现的函数非常罕见.因为所有的C语言编辑器都提供能完成各种常见任务函数,如printf()函数等.C语言编译器的实现者已经编写了大部分常见的通 ...

  9. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  10. [易学易懂系列|rustlang语言|零基础|快速入门|(7)|函数Functions与闭包Closure]

    [易学易懂系列|rustlang语言|零基础|快速入门|(7)函数Functions与闭包Closure] 有意思的基础知识 函数Functions与闭包Closure 我们今天再来看看函数. 在Ru ...

随机推荐

  1. Android应用开机自启动问题

    本文主要介绍Android应用如何实现开机自启动.自启动失败的原因以及通过ADB命令模拟发送BOOT_COMPLETED开机广播. 1.Android应用如何实现开机自启动 (1) 实现一个广播类,接 ...

  2. 使用Boost的DLL库管理动态链接库

    Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...

  3. asp.net mvc下实现微信公众号(JsApi)支付介绍

    本文主要讲解asp.net mvc框架下公众号支付如何实现,公众号支付主要包括三个核心代码,前台调起支付js代码.对应js调用参数参数生成代码.支付成功处理代码. 一.微信支付方式介绍 微信提供了各种 ...

  4. oh my god,写20万数据到Excel只需9秒

    还是菜鸟时,在某个.Net项目中,用户需要从业务系统导出Report,而数据量通常都在上万条以上,最初采用的方式就是在服务器端用NPOI生成Excel,把Data一行一行一个Cell一个Cell地写到 ...

  5. client,offset,scroll系列

    client(客户端),offset(偏移),scroll(滚动)1.client系列 clientTop 内容区域到边框顶部的距离 ,说白了,就是边框的高度 clientLeft 内容区域到边框左部 ...

  6. 为了考PMP,我做了一个刷题小程序

    一.背景 1.我是一名软件工程师,技术出身,担任开发组长,对项目管理不是很熟,所以决定系统学习下项目管理. 2.全球最适合的项目管理学习课程就是PMP,每年有4次PMP考试,证书还是很有含金量的. 3 ...

  7. HTML连载16-颜色控制属性2&标签选择器

    一.颜色控制属性(上接连载15) (4)十六进制 在前端开发中通过十六进制来表示颜色,其实本质就是RGB,十六进制中是通过每两位表示一个颜色. 例如:#FFEE00,其中FF代表的是R,EE代表的G, ...

  8. IOS 数据存储(NSKeyedArchiver 归档篇)

    什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字 ...

  9. Python自学day-12

    一.Mysql概述 RDBMS:关系型数据库管理系统.Mysql是一种RDBMS. Oracle:收费 Mysql:Oracle旗下免费 Sqlserver:微软 DB2:IBM Postgresql ...

  10. java模拟键鼠操作

    很久之前百度的,所以忘记了作者,所以仅作为自己的日记纪录在此: package com.robot.test;import java.awt.AWTException;import java.awt. ...