一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)相关的知识,希望对你有一定的参考价值。


各位看官们,大家好,上一回中咱们说的是C语言中常量的例子,这一回咱们说的例子是:大小写字符转换。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,在程序中经常会用到英文字符,有时候需要把英文字符进行大小写转换。如何进行转换呢?接下来我们一起看看具体的转换方法。

大家都知道每个字符都有相应的ASIIC码,如果把一个字符的ASIIC码加上一个数值就变成了另外一个字符的ASIIC码。比如给字符a的ASIIC码加上1后就成了字符字符b的ASIIC码。基于这个原理,我们可以在小写字符的ASIIC码加上一个数值转换成该字符大写形式时的ASIIC码。不过还有个问题,那就是加上的数值是多少呢?其实大家可以从ASIIC码表中发现规律,这个数值是固定的,而且我们可以计算出来,计算方法就是:"a-A"

另外,在ASIIC码表中,小写字符的ASIIC码比大写字符的要大,因此,把小写字符转换为大小字符时,需要减去一个数值。反之,把大写字符转换为小写字符时就加上一个数值。下面我们通过具体的代码来说明:

    char val_lower = 'a';                     //定义一个小写字符a
    char val_upper = val_lower - ('a'-'A');   //把小写字符a转换为大写字符A

    printf("the lower is %c ,the upper is %c \\n",val_lower,val_upper);

大家从代码中可以看到,把小写字符转换为大写字符的方法就是我们刚才介绍过的方法。此时,程序的输出结果如下:

the lower is a ,the upper is A 

从运行结果中可以看到小写字符转换成了大写字符。

有时候为了转换方便,可以定义一个宏来进行转换,下面是宏的定义:

    #define TOUPPER(c) ((c)-('a'-'A'))  //把小写字符转换为大写字符
    #define TOLOWER(c) ((c)+('a'-'A'))  //把大写字符转换为小写字符

    printf("the lower is %c ,the upper is %c \\n",val_lower,TOUPPER(val_lower));
    printf("the upper is %c ,the lower is %c \\n",val_upper,TOLOWER(val_upper));

下面是此时程序的运行结果:

the lower is a ,the upper is A 
the upper is A ,the lower is a 

其实,C标准库也提供了大小写字符的转换函数,它们位于<ctype.h>文件中,其函数原型如下:

   int toupper(int c);   //把小写字符转换为大写字符
   int tolower(int c);   //把大写字符转换为小写字符

这两个函数的使用方法和刚才我们代码中宏的使用方法类似,因此就不做详细说明了。不过它们具有很好的可移植性。

在标准库中这两个函数是通过一个转换表实现的,表中包含了ASIIC码以外的内容。我们的转换方法是建立在字符用ASIIC码表示的基础上,因此,如果使用了其它方式表示字符,那么我们定义的宏就会失效。鉴于这个原因,我们推荐大家使用标准库提供的大小写字符转换函数。

看官们,这里就不写代码了,完整的代码放到了我的资源中,大家可以点击这里下载使用。

下面是程序的运行结果,请大家参考:

init value : the lower is a ,the upper is A 
the lower is a ,the upper is A 
the upper is A ,the lower is a 
the lower is a ,the upper is A 
the upper is A ,the lower is a 

各位看官,关于大小写字符转换的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


以上是关于一起talk C栗子吧(第一百六十六回:C语言实例--大小写字符转换)的主要内容,如果未能解决你的问题,请参考以下文章

一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型一)

一起talk C栗子吧(第一百六十回:C语言实例--套接字通信模型二)

一起talk C栗子吧(第一百六十二回:C语言实例--套接字知识体系图)

一起talk C栗子吧(第一百六十八回:C语言实例--C语言中的布尔--bool类型)

一起talk C栗子吧(第一百一十六回:C语言实例--线程同步之互斥量二)

一起talk C栗子吧(第一百五十六回:C语言实例--基于AF_UNIX域的流套接字通信)