在程序中经常会需要对字母的大小写进行转换,虽然有现成的upper/lower函数,但是有时因为各种原因,或想减小程序的体积,需要自己编写函数来实现。

这里来讨论一下各种转换的方法。

根据ASCII码我们可以知道大写字母和小写字母相差32(20H)=100000B(二进制).

根据这个原理我们可以方便的进行大小写的转换。如是是大写字母+32就变成小写。

例子: 大写字母’A’ 它的ASCII码是65. ‘a’的ASCII码是97,看下面的等式。

‘A’+32=65+32=97 = ‘a’

另外:

‘a’的二进制是01100001B

‘A’的二进制是01000001B

也就是说小写和大写的区别就是100000B ,也就是bit 5的区别。

所以还可以通过与运算修改bit 5的值也可以达到转换的目的。

把第5位置为1可以按位”或”操作,置为0 可以按位”与”操作

00100000B = 32 = 20H

11011111B = 223 = DFH

‘a’ & 223 = ‘A’ ‘A’ | 32 = ‘a’

其实也就是字母的第5位(二进制位),如果它是1就是小写的,如果是0就是大写。

另外在使用经典的代码比较时

小写转大写 >=’a’ 并且 <=’z’

大写转小写 >=’A’ 并且 <=’Z’

可以把这两个比较的顺序对换一下。

改成<=’Z’ 并且 >=’A’ ,看起来没有什么区别,但是实际运行中效率会更高。

原理: 因为比较时,只要第一个条件不符合,那就不会去比较第二个条件了,利用这一点可以加快比较速度。

小写字母都是大于’Z’的,当然也大于’A’。

比如转换aBCD为小写,a已经是小写了,如果按原来的方法比较>=’A’ && <=’Z’ 需要比较两次。

用后面的方法只需要比较一次。

下面是实现的代码.有两种方式。(转大写的)

void upper(char string)

{

while(string)

{

#if 0

//第一种方式比较经典的方法

if (string >='a' && string <='z')

string &= 0xDF;

#else

/*

好像网上还没有见过这种用法,算是一个意外发现吧.

减去'a',如果它的值在0-25之前则它肯定是小写字母。因为是无符号数.

如果这个字符小于a那会得到负数(>128)

*/

if ((unsigned char)(string - 'a') < 26)

string -= 32;

//大写转小写只要把'a'改为'A',转换的方式为`+= 32`或` |= 32`

#endif

++string;

}

return;

}

两种不同的方式的汇编代码比较,用经典的方法执行效率可能会高一点儿。

用新的方法生成的文件小一点(少几个字节,在程序空间比较紧张的情况下可以用).

c语言一串大写字母转小写,C语言的基础函数大小写转换相关推荐

  1. 删除字符串的大写字母c语言,将字符串大写字母变小写 C语言 字符串中大小写字母转换...

    java怎样将大写字母转换成小写字母 具体代码如下,字符串中大.小写互转 1)输入 第一行只有一个整数m(m都说欲擒故纵最能虏获芳心,可小编拿什么对抗她在皱眉时,小编忍不住嘘寒问暖的情绪. jquer ...

  2. html案例字符串大小写转换,将字符串大写字母变小写 c语言编程:字符串中大小写字母转换...

    java怎样将大写字母转换成小写字母 具体代码如下,字符串中大.小写互转 1)输入 第一行只有一个整数m(m jquery 字符串大写字母转小写 js字符转换成小写的方法:toLowerCase()j ...

  3. C语言:一个大写字母转换为小写字母

    小写字母的的ASCII码总比对应的大写字母的ASCII码大32,所以给小写字母+32即可. #include <stdio.h>int main(void){char ch1,ch2;pr ...

  4. c语言一般用大写字母定义什么,c语言程序格式是什么

    c语言格式是:1.C程序都是从main函数开始执行的:2.C程序整体是由函数构成的:3.函数体的内容在[{}]中:4.每一个执行语句都以[:]结尾:5.英文字母大小写通用. c语言格式是: 1. 主函 ...

  5. C语言_字符串_将键盘输入的大写字母转换为小写

    # include <stdio.h>char fun(char *c) {if (*c<='Z' && *c>='A') //满足条件:*c是大写字母*c-= ...

  6. c语言学习-自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数)

    c语言自定义函数并调用将一个字符串中的小写字母改为大写字母(数组元素和数组名作函数参数) 程序流程图: 代码: #include<stdio.h> char strupr(char ch[ ...

  7. 输入大写字母,输出大小写字母及其对应的ASCII码;输入语句,将大写字母变成小写字母;将句子中每个单词的第一个字母转换为大写字母;输入一串字符,分别算出英文字母、空格、数字、其他字符的个数(C)

    养成好习惯,点个赞 再走:有问题,欢迎私信.评论,我看到都会回复的 以下题目是对于ASCII码的一些练手题 在c语言中 使用%c输出的是字符本身 使用%d输出的是字符对应的ASCII 在ASCII中, ...

  8. c语言:(指针)输入一行文字,找出其中的大写字母,小写字母,数字,空格以及其他字符

    c语言:(指针)输入一行文字,找出其中的大写字母,小写字母,数字,空格以及其他字符 #include<stdio.h> #include<stdlib.h> #include& ...

  9. java 输入一串字符统计大写字母个数小写字母个数及特殊符号并输出

    ```java//输入一串字符统计大写字母个数小写字母个数及特殊符号并输出public static void test5(String str){char[] s = str.toCharArray ...

最新文章

  1. hdu 2669 Romantic
  2. 练习题3(求四位会员卡号之和)
  3. 软件工程---团队作业四
  4. 160 - 3 Afkayas.2
  5. 网络爬虫--15.【糗事百科实战】多线程实现
  6. 字符串的模式匹配--BF算法KMP算法
  7. 码农回忆刚毕业工作的那年
  8. SSL:Self-Supervised Learning(自监督学习)是什么?
  9. IT餐馆—第四回 离职
  10. 一加9R国行版即将到来:搭载骁龙870 售价预计3K内
  11. 'int' object has no attribute 'backward'报错 使用Pytorch编写 Hinge loss函数
  12. ArcGIS学习总结(四)——缓冲区分析应用
  13. m语言常用函数和命令
  14. leetcode/求平方根
  15. Pycharm2018.2破解版本闪退问题解决办法
  16. Skip List(跳表)
  17. 新手如何学习学嵌入式开发?
  18. 【Apache Spark 】第 10 章使用 MLlib 进行机器学习
  19. 【STM32】基于IWDG实现复位(手动喂狗)功能
  20. 配置AD域环境、OU、GPO

热门文章

  1. 2018华工计算机考研分数,2018年华南理工大学考研复试分数线
  2. java foreach标签,jstl c:foreach标签
  3. yaml数组解析_yaml格式详解
  4. helm istio k8s docker
  5. SonarQube 代码扫描任务集成
  6. WebStorm ES6 语法支持设置
  7. 【leetcode❤python】Move Zeroes
  8. 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
  9. [ruby on rails] 跟我学之(6)显示指定数据
  10. Ubuntu11.10配置Eclipse下Android开发环境