• Unix/Linux环境C编程入门教程(25) C/C++字符测试那些事儿


    1. 首先这些全部是宏,只不过我们初学者和使用者可以直接把他当作函数用。


       



    isalnum(测试字符是否为英文或数字)

    相关函数

    isalpha,isdigit,islower,isupper

    表头文件

    #include<ctype.h>

    定义函数

    int isalnum (int c)

    函数说明

    检查参数c是否为英文字母或阿拉伯数字,在标准c中相当于使用"isalpha(c) || isdigit(c)"做测试。

    返回值

    若参数c为字母或数字,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 找出str 字符串中为英文字母或数字的字符*/
    #include < ctype.h>
    main()
    {
    char str[]="123c@#FDsP[e?";
    int i;
    for (i=0;str[i]!=0;i++ )
    if ( isalnum(str[i])) printf("%c is an alphanumeric character ",str[i]);
    }

    执行

    1 is an apphabetic character
    2 is an apphabetic character
    3 is an apphabetic character
    c is an apphabetic character
    F is an apphabetic character
    D is an apphabetic character
    s is an apphabetic character
    P is an apphabetic character
    e is an apphabetic character

       




    isalpha (测试字符是否为英文字母)

    相关函数

    isalnum,islower,isupper

    表头文件

    #include<ctype.h>

    定义函数

    int isalpha (int c)

    函数说明

    检查参数c是否为英文字母,在标准c中相当于使用"isupper(c)||islower(c)"做测试。

    返回值

    若参数c为英文字母,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 找出str 字符串中为英文字母的字符*/
    #include <ctype.h>
    main()
    {
    char str[]="123c@#FDsP[e?";
    int i;
    for (i=0;str[i]!=0;i++)
    if(isalpha(str[i])) printf("%c is an alphanumeric character ",str[i]);
    }

    执行

    c is an apphabetic character
    F is an apphabetic character
    D is an apphabetic character
    s is an apphabetic character
    P is an apphabetic character
    e is an apphabetic character

       




    isascii(测试字符是否为ASCII 码字符)

    相关函数

    iscntrl

    表头文件

    #include <ctype.h>

    定义函数

    int isascii(int c);

    函数说明

    检查参数c是否为ASCII码字符,也就是判断c的范围是否在0到127之间。

    返回值

    若参数c为ASCII码字符,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 判断int i是否具有对映的ASCII码字符*/
    #include<ctype.h>
    main()
    {
    int i;
    for(i=125;i<130;i++)
    if(isascii(i))
    printf("%d is an ascii character:%c ",i,i);
    else
    printf("%d is not an ascii character ",i);
    }

    执行

    125 is an ascii character:}
    126 is an ascii character:~
    127 is an ascii character:
    128 is not an ascii character
    129 is not an ascii character

       




    iscntrl(测试字符是否为ASCII 码的控制字符)

    相关函数

    isascii

    表头文件

    #include <ctype.h>

    定义函数

    int iscntrl(int c);

    函数说明

    检查参数c是否为ASCII控制码,也就是判断c的范围是否在0到30之间。

    返回值

    若参数c为ASCII控制码,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

       




    isdigit(测试字符是否为阿拉伯数字)

    相关函数

    isxdigit

    表头文件

    #include<ctype.h>

    定义函数

    int isdigit(int c)

    函数说明

    检查参数c是否为阿拉伯数字0到9。

    返回值

    若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 找出str字符串中为阿拉伯数字的字符*/
    #include<ctype.h>
    main()
    {
    char str[]="123@#FDsP[e?";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isdigit(str[i])) printf("%c is an digit character ",str[i]);
    }

    执行

    1 is an digit character
    2 is an digit character
    3 is an digit character

       




    isgraphis(测试字符是否为可打印字符)

    相关函数

    isprint

    表头文件

    #include <ctype.h>

    定义函数

    int isgraph (int c)

    函数说明

    检查参数c是否为可打印字符,若c所对映的ASCII码可打印,且非空格字符则返回TRUE。

    返回值

    若参数c为可打印字符,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 判断str字符串中哪些为可打印字符*/
    #include<ctype.h>
    main()
    {
    char str[]="a5 @;";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isgraph(str[i])) printf("str[%d] is printable character:%d ",i,str[i]);
    }

    执行

    str[0] is printable character:a
    str[1] is printable character:5
    str[3] is printable character:@
    str[4] is printable character:;

       




    islower(测试字符是否为小写字母)

    相关函数

    isalpha,isupper

    表头文件

    #include<ctype.h>

    定义函数

    int islower(int c)

    函数说明

    检查参数c是否为小写英文字母。

    返回值

    若参数c为小写英文字母,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    #include<ctype.h>
    main()
    {
    char str[]="123@#FDsP[e?";
    int i;
    for(i=0;str[i]!=0;i++)
    if(islower(str[i])) printf("%c is a lower-case character ",str[i]);
    }

    执行

    c is a lower-case character
    s is a lower-case character
    e is a lower-case character

       




    isprint(测试字符是(否为可打印字符)

    相关函数

    isgraph

    表头文件

    #include<ctype.h>

    定义函数

    int isprint(int c);

    函数说明

    检查参数c是否为可打印字符,若c所对映的ASCII码可打印,其中包含空格字符,则返回TRUE。

    返回值

    若参数c为可打印字符,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /* 判断str字符串中哪些为可打印字符包含空格字符*/
    #include<ctype.h>
    main()
    {
    char str[]="a5 @;";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isprint(str[i])) printf("str[%d] is printable character:%d ",i,str[i]);
    }

    执行

    str[0] is printable character:a
    str[1] is printable character:5
    str[2] is printable character:
    str[3] is printable character:@
    str[4] is printable character:;

       




    isspace(测试字符是否为空格字符)

    相关函数

    isgraph

    表头文件

    #include<ctype.h>

    定义函数

    int isspace(int c)

    函数说明

    检查参数c是否为空格字符,也就是判断是否为空格('')、定位字符(' ')、CR(' ')、换行(' ')、垂直定位字符('v')或翻页('f')的情况。

    返回值

    若参数c为空格字符,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /*将字符串str[]中内含的空格字符找出,并显示空格字符的ASCII码*/
    #include <ctype.h>
    main()
    {
    char str="123c @# FD sP[e? ";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isspace(str[i]))
    printf("str[%d] is a white-space character:%d ",i,str[i]);
    }

    执行

    str[4] is a white-space character:32
    str[7] is a white-space character:32
    str[10] is a white-space character:9 /* */
    str[16] is a white-space character:10 /* */

       




    ispunct(测试字符是否为标点符号或特殊符号)

    相关函数

    isspace,isdigit,isalpha

    表头文件

    #inlude<ctype.h>

    定义函数

    int ispunct(int c)

    函数说明

    检查参数c是否为标点符号或特殊符号。返回TRUE也就是代表参数c为非空格、非数字和非英文字母。

    返回值

    v若参数c为标点符号或特殊符号,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /*列出字符串str中的标点符号或特殊符号*/
    #include <ctype.h>
    main()
    {
    char str[]="123c@ #FDsP[e?";
    int i;
    for(i=0;str[i]!=0;i++)
    if(ispunct(str[i])) printf("%c ",str[i]);
    }

    执行

    v
    @#[?

       




    isupper(测试字符是否为大写英文字母)

    相关函数

    isalpha,islower

    表头文件

    #include<ctype.h>

    定义函数

    int isupper(int c)

    函数说明

    检查参数c是否为大写英文字母。

    返回值

    若参数c为大写英文字母,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /*找出字符串str中为大写英文字母的字符*/
    #include <ctype.h>
    main()
    {
    char str[]="123c@#FDsP[e?";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isupper(str[i])) printf("%c is an uppercase character ",str[i]);
    }

    执行

    F is an uppercase character
    D is an uppercase character
    P is an uppercase character

       




    isxdigit(测试字符是否为16进制数字)

    相关函数

    isalnum,isdigit

    表头文件

    #include<ctype.h>

    定义函数

    int isxdigit (int c)

    函数说明

    检查参数c是否为16进制数字,只要c为下列其中一个情况则返回TRUE。16进制数字:0123456789ABCDEF。

    返回值

    若参数c为16进制数字,则返回TRUE,否则返回NULL(0)。

    附加说明

    此为宏定义,非真正函数。

    范例

    /*找出字符串str中为十六进制数字的字符*/
    #include <ctype.h>
    main()
    {
    char str[]="123c@#FDsP[e?";
    int i;
    for(i=0;str[i]!=0;i++)
    if(isxdigit(str[i])) printf("%c is a hexadecimal digits ",str[i]);
    }

    执行

    1 is a hexadecimal digits
    2 is a hexadecimal digits
    3 is a hexadecimal digits
    c is a hexadecimal digits
    F is a hexadecimal digits
    D is a hexadecimal digits
    e is a hexadecimal digits

       





    2.小试牛刀:文档统计器的实现实现主要也是利用本文介绍的函数isalnum(),isalpha(),isdigit(),islower(),isupper()由于可能很多同学还没有接触过C语言文件IO的函数,所以我们使用字符串输入模拟从文本中读取。

       

    #include <stdio.h> //gets(),printf()
    #include <ctype.h>
    /*isalnum(),isalpha(),isdigit(),islower(),isupper()*/
    int main()
    {
        char buffer[1024];  //变量定义
        int i = 0;          //每一个类型的计数器
        int iNum = 0;
        int iLower = 0;
        int iSupper = 0;
        int iSpace  = 0;
        printf("please input string:");
    
        gets(buffer);
    
        while(i <1024 && buffer[i] !='') //循环终止条件
        {
            if(isalnum(buffer[i]))
            {
                ++iNum;
            }
            if(isspace(buffer[i]))
            {
                ++iSpace;
            }
            if(islower(buffer[i]))
            {
                ++iLower;
            }
            if(isupper(buffer[i]))
            {
                ++iSupper;
                printf("%c is supperchar 
    ",buffer[i]);
            }
            ++i;
        }
        printf("char+number %d
    space %d
    lowerchar %d
    supperchar %d
    ",
               iNum,iSpace,iLower,iSupper);
        return 0;
    }
    

     

    3. 各个函数在Unix/Linux平台的效果

       在RHEL6上

    在RHEL7上

    在Solaris上

    在MAC上

    各个平台效果展示完毕。

    对于字符的测试我们上述这些貌似函数的宏一般足以胜任,但是往往还有一些特殊要求的需求你自己做一些修改。

  • 相关阅读:
    Java中符号位扩展
    BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)
    BZOJ1030: [JSOI2007]文本生成器(AC自动机)
    BZOJ2434: [Noi2011]阿狸的打字机(AC自动机 树状数组)
    BZOJ1432: [ZJOI2009]Function(找规律)
    BZOJ2659: [Beijing wc2012]算不出的算式(数学)
    洛谷P3796 【模板】AC自动机(加强版)
    洛谷P3966 [TJOI2013]单词(AC自动机)
    BZOJ2580: [Usaco2012 Jan]Video Game(AC自动机)
    后缀自动机经典操作
  • 原文地址:https://www.cnblogs.com/new0801/p/6177084.html
Copyright © 2020-2023  润新知