分类函数

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. Java MaxDirectMemorySize

    Refer to for detail: https://dzone.com/articles/default-hotspot-maximum-direct-memory-size 1. Java d ...

  2. Ubuntu Linux服务器搭建SSL/TLS(https)(在StartSSL可以得到免费证书)

    目录 1 生成公钥和私钥对 2 公钥提交到CA机构签发一个crt证书 3 配置证书链 4 在Apache里开启SSL支持并配置crt证书和私钥 5 配置HSTS (可选) 6 总结 首先SSL/TLS ...

  3. c# HttpWebRequest https的一些处理

    先看下请求方法 public string Get_Request( string strUrl, CookieContainer _cookie = null, string strHost = & ...

  4. 在 .pro里加入 QMAKE_CXXFLAGS += /MP 将并行编译(VC),加快编译速度(姚冬的办法),或者-j4参数(MinGW)

    但是只对VC编译器有效果. 另外还可以自己设置stdafx.h文件 http://www.zhihu.com/question/23045749 C:\Qt\Qt5.6.2_static\bin\qm ...

  5. 多进程demo

    多进程实现DOS重定向输出,界面如下: 主要的代码实现如下: #define MAXREADBUFFERLEN (60 * 1000) void CRedirectDlg::OnBnClickedBu ...

  6. Win7 访问 数据库 慢

    不让TCP/IP调谐拖累网速 在Windows Server 2008工作环境中,下载访问网络中大容量的文件内容时,我们有时会感觉到网络连接速度非常缓慢,严重的时候还会出现不能访问的现象.遭遇这类故障 ...

  7. 在前后端分离项目中使用SpringBoot集成Shiro

    前言 这次在处理一个小项目时用到了前后端分离,服务端使用springboot2.x.权限验证使用了Shiro.前后端分离首先需要解决的是跨域问题,POST接口跨域时会预发送一个OPTIONS请求,浏览 ...

  8. SQLAlchemy基本使用,创建表,增删改查

    基础语法 创建连接 from sqlalchemy import create_engine # 写法1 engine = create_engine("postgresql://scott ...

  9. 【Mac】Mac快捷键与Mac下的Idea快捷键

             本人之前一直在windows平台下进行开发,刚接触Mac的时候有些许的不适应,无论是无鼠标操作,还是文件系统的变更,以及键盘格式以及系统快捷键的变更,都曾对自己造成过一定程度的困扰. ...

  10. 【python3两小时根本不够】入门笔记04:线程+Lock安全同步

    有了简单爬虫,但是效率实在是太慢,于是决定启用线程进行爬取数据 但是对于临界资源的定义不好把握,思路如下: 1.定义队列(Queue的数据结构,List也可,安全性待考究) demo:https:// ...