作用:
C库函数 int tolower(int c)转换给定的字母为小写。
C库函数 int toupper(int c)转换给定的字母为大写。

声明

以下是声明的tolower()函数。

int tolower(int c);
int toupper​​​​​​​(int c);

参数

  • c -- 这是字母转换为小写(或者大写)。

头文件:

#include <ctype.h>

例子如下:

#include <stdio.h>
#include <ctype.h>int main(void)
{char ch = 'A';ch = tolower(ch);printf("ch=%c\n",ch);ch = 'b';ch = toupper(ch);printf("ch=%c\n",ch);return 0;
}

输出结果:

ch=a
ch=B

扩展:为什么形参是int类型为不是char类型?

以下内容参考:http://c.biancheng.net/ref/tolower.html

关于大小写字母

人们通常认为只有"acb...xyz"才是小写字母,只有"ABC...XYZ"才是大写字母,其实这是不对的。大小写字母并不是固定的,不同的语言文化可能会包含不同的大小写字母,例如在“简体中文”环境中,西里尔文БГЁ、希腊文ΣΩΔΨΦ(数学物理公式中常用希腊字母)等都将成为大写字母,它们对应的小写字母是бгё - σωδψφ
    我们可以通过 setlocale() 函数改变程序的地域设置,让程序使用不同的字符集,从而支持不同的语言文化。
    在默认的地域设置(默认为"C")中,C语言通常使用 ASCII 编码,能较好地支持英文,此时的

大写字母包括:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

小写字母包括:a b c d e f g h i j k l m n o p q r s t u v w x y z
在其它地域设置中,可能会使用 GBK(简体中文)、BIG5(繁体中文)、Shift-JIS(日文)、Unicode(世界统一码) 等更加复杂的编码,它们包含了更多的大小写字母。
    也就是说,一个字符是否是大写字母或者小写字母和程序的地域设置有关,不同的地域设置会包含不同的大小写字母。

字母一定要区分大小写吗?

我们通常认为,一个字母要么是小写字母,要么是大写字母;并且一个小写字母必定对应一个大写字母,反之亦然。这种说法虽然适用于默认的地域设置(默认为"C"),但是并不一定适用于其它的地域设置。
    以 Windows 下的“简体中文”环境为例,拼音āōūǖ都将成为小写字母,但是它们没有对应的大写字母。Windows 下的“简体中文”环境使用 GBK 编码,该编码并没有包含ĀŌŪǕ这些大写形式。
    罗马数字ⅲⅵⅶⅸⅢⅥⅦⅨ也会被视为字母,并且从视觉上看起来是大小写对应的。其实不然,对于 Windows 来说,ⅲⅵⅶⅸⅢⅥⅦⅨ都仅仅是字母而已,并没有所谓的“大小写”形式;换句话说,它们既不是大写字母,也不是小写字母,仅仅是字母而已。
    以上说法仅适用于 Windows,在 Linux 和 Mac OS 下使用“简体中文”情况会有所不同:

  • āōūǖ会有对应的大写字母ĀŌŪǕ,因为 Linux 和 Mac OS 下的“简体中文”使用 Unicode 字符集(严格来说是 UTF-8 编码),该字符集包含了世界上所有的字符。
  • 在 Mac OS 下,ⅲⅵⅶⅸⅢⅥⅦⅨ根本不会被视为字母;在 Linux 下,ⅲⅵⅶⅸ被视为小写字母,ⅢⅥⅦⅨ被视为大写字母。

站在专业角度看问题

C语言标准规定,在默认的"C"地域设置中,只有 islower() 或者 isupper() 返回“真”的字母才会被视为字母;也就是说,一个字母要么是小写字母,要么是大写字母。

但是对于其它的地域设置,C语言并没有这种规定,一个字母可以是 islower() 或者 isupper() 返回“真”的字符,也可以是被当前语言环境显式地(刻意地)指定为字母的字符,例如罗马数字ⅲⅵⅶⅸⅢⅥⅦⅨ。但是有一个原则,被指定为字母的字符一定不能是 iscntrl()、isdigit()、ispunct()、isspace() 返回“真”的字符。

对于 tolower(),仅当有且只有一个对应的小写字母时,这种转换才能成功;如果没有对应的小写字母,或者有多个对应的小写字母,那么转换失败。转换成功返回对应的小写字母,转换失败直接返回 c(值未变)。

拓展阅读

我们在编写C语言程序时,通常使用 char 类型来表示一个字符,而 tolower() 的参数却是 int 类型,这是为什么呢?请猛击《为什么<ctype.h>中的函数参数都是int类型》一文了解详情。

以下内容参考:http://c.biancheng.net/ref/4.html

为什么<ctype.h>中的函数参数都是int类型

<ctype.h> 头文件中包含了一系列与字符处理有关的函数,这些函数有一个共同特点:它们的参数都是 int 类型。例如:

  • int isalnum ( int c );
  • int islower ( int c );
  • int isupper ( int c );
  • int tolower ( int c );
  • int toupper ( int c );

为什么这些函数的参数都是 int 类型?

在编写C语言程序时,我们通常使用char或者unsigned char来表示一个字符,而 <ctype.h> 所包含的字符处理函数的参数都是 int 类型,这是为什么呢?

<ctype.h> 中的字符处理函数除了能够接收 unsigned char 范围内的“普通”字符,还必须能够接收一个无效的字符——EOF。

EOF 除了可以表示文件结尾,还可以表示一个无效的字符。

也就是说,参数要接收的数值范围大于 char 所能表示的数值范围,所以参数的类型必须大于char。大于 char 的类型有 short、int、long 等,C语言标准干脆规定就用 int 吧,这样绰绰有余,弹性很大。

char 可以隐式地转换为 int,我们在给字符处理函数传参时不需要再进行显式的(强制的)类型转换了。

关于 char 以外的字符

C语言标准规定,<ctype.h> 中的字符处理函数至少要能够处理 unsigned char 范围以内的字符,范围以外的字符不做要求,各个组织在实现标准库时可以自由发挥。

这就导致不同的标准库之间存在差异,例如在 Visual Studio 中处理 unsigned char 以外的字符会导致断言失败,程序终止执行;而在 Xcode(基于LLVM编译器)中可以顺利处理 unsigned char 以外的字符,比如汉字"中国我爱你!"

在 Debug 模式下断言才会生效。

为了让代码更有兼容性,建议使用 <wctype.h> 中的宽字符处理函数来处理 unsigned char 以外的字符。

C语言tolower和toupper的用法相关推荐

  1. C语言函数:tolower()、toupper字符大小写转换函数。

    C语言函数:tolower().toupper字符大小写转换函数. int toupper( int c) int tolower( int c) tolower():将字母转为小写. toupper ...

  2. 慎用ToLower和ToUpper,小心把你的系统给拖垮了

    不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一: ...

  3. 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )

    文章目录 一.指针数组用法 ( 自我结束能力 ) 二.完整代码示例 一.指针数组用法 ( 自我结束能力 ) 在上一篇博客 [C 语言]数组 ( 指针数组用法 | 命令行参数处理 ) 中的主函数中的 c ...

  4. C语言之 scanf() 函数的用法

    C语言之 scanf() 函数的用法 输入一个正整数,对这个正整数中的各位进行比较,输出最大那个数 比如: 输入:123456789 输出:9 #include <stdio.h>int ...

  5. C语言malloc,free的用法

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105163414 C ...

  6. C语言tolower函数介绍、示例和实现

    文章目录 1.包含头文件 2.函数声明 3.功能说明 4.示例 5.自定义的tolower函数的实现方法 6.获取视频教程 7.版权声明 C语言tolower函数用于把大写字母转换为小写字母. 在本文 ...

  7. java实现c语言的函数_C语言tolower函数介绍、示例和实现

    C语言tolower函数用于把大写字母转换为小写字母. 在本文中,我们先来介绍tolower函数的使用方法,然后编写一个自定义的_tolower函数,实现与tolower函数相同的功能. 1.包含头文 ...

  8. 关于C语言编程中include的用法

    关于C语言编程中include的用法 1 iostream与iostream.h的区别: #include <iostream.h> // 这个就是1998年标准化以后的标准头文件 #in ...

  9. C语言中图形函数及其用法

    C语言中图形函数及其用法  Turbo C 2.0具有丰富的图形功能,它提供了70多个图形函数.在这里只介绍最常用的一部分,其余的图形函数及用法可参阅相关书籍.图形函数均在头文件"graph ...

  10. c语言中的static和extern,C语言extern与static的用法,及extern “c

    C语言extern与static的用法,及extern "c " 一.c语言static与extern的用法 1.static和extern: 大工程下我们会碰到很多源文件. 文件 ...

最新文章

  1. 机器学习--多标签softmax + cross-entropy交叉熵损失函数详解及反向传播中的梯度求导
  2. 1.5 @SafeVarargs注解
  3. linux下源码安装cmake
  4. delphi 7 学习步骤
  5. 铁乐学Python_day09_函数
  6. MySQL高级知识(四)——Explain
  7. 马化腾评 ofo 溃败原因;京东到家否认裁员;王兴质押全部摩拜股权 | 极客头条...
  8. 运维工程师面试题 ----- 系统网络类
  9. 表结构设计器(EZDML)1.98版公布
  10. 大数据技术架构都有哪些变化
  11. 基于jquery鼠标点击图片翻开切换效果
  12. 从Windows 1.0到Vista启动画面回顾
  13. [算法竞赛入门]WERTYU
  14. 第 3 讲 三维空间刚体运动
  15. 39、C++11多线程及其学习笔记
  16. MStar点屏(LVDS接口屏)
  17. uint16 累加_在一个驱动程序中看到uint16,uint32,unit8,int8是什么意思?有何作用?...
  18. 小时候的蓝精灵,大家还记得木有哇?
  19. 混合个人训练第四十六场(A,B题解) A 数论线代全家桶 (all) B: 看星星 (stars)
  20. linux部署的Oracle 11G数据库创建实例

热门文章

  1. mysql数据库表中重命名语句_mysql数据库重命名
  2. openwrt之mwan3负载均衡·多线多拨
  3. ai文字渐变_AI制作渐变色立体文字效果
  4. 【搬运】罗霸道网文写作经验分享
  5. strtolower()和strtoupper()中文乱码问题
  6. 重庆云阳2021云中高考成绩查询,2021年云阳县高考状元是谁及其成绩名单
  7. 2018-2019-2 网络对抗技术 20165322 Exp4 恶意代码分析
  8. spark MLlib 概念 2:Stratified sampling 层次抽样
  9. ubuntu10.10下smbd服务配置——实现主机WinXP与虚拟机Ubuntu10.10共享
  10. 字符串(蓝桥杯模拟赛)