zoukankan      html  css  js  c++  java
  • ctype.h库函数

      头文件ctype.h声明了一组用于分类和转换单个字符的函数。所有的函数都接收一个int型的参数,并返回一个int——返回的int可能代表一个字符,也可能代表的是bool值(0为假,非0为真)。

      你可能会有疑问,既然是字符操作,接受的参数为什么不用char,而用int? Good question,答案我也不确定……O_O 好吧,我们继续……

    因为这些“函数”太过常用,且调用频繁,所以为了提高效率,这些“函数”是由一些宏实现的,通过查看源文件可以很容易发现这一点。还有一点需要了解的是,如果修改了区域设置(默认为“C”区域设置),这些函数的行为可能会略有不同,不过不用担心,现在只需要知道有这么一个概念,后面介绍区域设置(locale.h)会再详细讨论。它们可以分为两组。一组用来判断字符是否属于某个分类,包括:

    名称签名描述
    isalnum int isalnum ( int c ); 数字或字母
    isalpha int isalpha ( int c ); 字母,或者那些实现定义的字符集中iscntrl,isdigit,ispunct,isspace判定都不为真的字符。在“C”区域设置里,isalpha只是isupper,islower返回真的字符
    iscntrl int iscntrl ( int c ); 控制字符,与isprint相反,即不可打印字符
    isdigit int isdigit ( int c ); 十进制数字字符
    isgraph int isgraph ( int c ); 除空格(' ')以外的其他可打印(isprint为true)字符
    islower int islower ( int c ); 小写字母
    isprint int isprint ( int c ); 包括空格(' ')在内的打印字符
    ispunct int ispunct ( int c ); 除空格(' ')和isalnum判定为真的字符以外的所有打印字符
    isspace int isspace ( int c ); 空白字符
    isupper int isupper ( int c ); 大写字母
    isxdigit int isxdigit ( int c ); 16进制数字字符

    另外一组用来转换大小写,包括:

    名称签名描述
    toupper int toupper ( int c ); 转换c为大写
    tolower int tolower ( int c ); 转换c为小写

    下面拿isalpha,toupper/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
    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
      
    int main ( int argc, char *argv[] )
    {
        int c = 'a';
        int uc; 
      
        if( isalpha( c ) )
        {
            printf( "'%c' is an alphabet " ,c );
      
            if( islower( c ))
            {
                uc = toupper( c );
                printf( "uppercase: %c ", uc );
            }
            else
            {
                uc = tolower( c );
                printf( "lowercase: %c ", uc );
            }
        }
        else
        {
            printf( "'%c' is not an alphabet " ,c );
        }   
      
        return EXIT_SUCCESS;
    }

    最后附一张默认的“C”区域设置下ASCII码对应的判定结果,可以帮助你对这些函数的判定结果有个直观的印象,enjoy it !

    ASCII字符iscntrlisspaceisupperislowerisalphaisdigitisxdigitisalnumispunctisgraphisprint
    0x00 .. 0x08 NUL, (其他控制字符) x                    
    0x09 .. 0x0D (空白字符代码: ' ','f','v',' ',' ') x x                  
    0x0E .. 0x1F (控制字符) x                    
    0x20 空格 (' ')   x                 x
    0x21 .. 0x2F !"#$%&'()*+,-./                 x x x
    0x30 .. 0x39 01234567890           x x x   x x
    0x3a .. 0x40 :;<=>?@                 x x x
    0x41 .. 0x46 ABCDEF     x   x   x x   x x
    0x47 .. 0x5A GHIJKLMNOPQRSTUVWXYZ     x   x     x   x x
    0x5B .. 0x60 []^_`                 x x x
    0x61 .. 0x66 abcdef       x x   x x   x x
    0x67 .. 0x7A ghijklmnopqrstuvwxyz       x x     x   x x
    0x7B .. 0x7E {|}~                 x x x
    0x7F (DEL) x

    首发自:http://yaohuiji.com/
    欢迎转载和探讨学习,但转载时必须保留本文的署名Jack Yao及链接,未经许可请勿商业使用。 

  • 相关阅读:
    LAMP环境搭建
    Httpd
    MySQL常用配置和性能压力测试:MySQL系列之十五
    MySQL的高可用实现:MySQL系列之十四
    MySQL的复制:MySQL系列之十三
    备份与恢复:MySQL系列之十二
    日志记录:MySQL系列之十一
    事务隔离实现并发控制:MySQL系列之十
    SpringMVC上传文件(图片)并保存到本地
    W10如何开启LinuxBash及安装Ubuntu
  • 原文地址:https://www.cnblogs.com/johnleo/p/ctype_h.html
Copyright © 2011-2022 走看看