网站/小程序/APP个性化定制开发,二开,改版等服务,加扣:8582-36016

    C语言中,有时候我们遇到这样的考题,将c语言大写字母转化为小写字母,下面这篇文章主要给大家介绍了关于C语言中字母大小写转化的相关资料,文中介绍的非常详细,需要的朋友可以参考下

    C语言入门的时候都会遇到要求写大小写转换的题目

    这类题目主要通过ASCII(美国信息交换标准代码)码差值实现,

    A对应ASCII码十进制数字是65,a对应ASCII码十进制数字是97,

    即大小写字母之间ASCII码差值为32,想要将大写字母转换为小写字母可以将该字符ASCII码值+32,同理小写字母转换成大写字母只需将该字符ASCII码值-32。

    咱们先来看看这个代码:

     咋一看,欸?很不错,没啥毛病,编译运行试一下,发现还不错

     确实可以,但是.....这样呢?

     啊这.........这是怎么回事呢?

    原来,

     我们之前的这个else,它的执行条件是之前if里的范围的补集,也就是说只要是在(x<='a'||x>='z')的范围内,它都会执行“x=x+32”,所以出现上述输入字符,也能输出的情况。

    这个时候,只要具体化else的执行条件,将其变成else if,即可。

    如下:

     这样就可以啦!

    附一个C语言字母大小写互换的简单方法

    字母的大小写互换其实很简单

    回到最基本的数据的存储形式,从八位二进制角度去看大写字母和小写字母,你会发现它们的低四位是相同的,高四位有细微差别。

    举例:

    ASCIIDECBIN
    ‘A’6501000001
    ‘a’9701100001
    ‘B’6601000010
    ‘b’9801100010
    ‘X’8801011000
    ‘x’12001111000

    仔细观察 发现是第六位不同!

    大小写互换的方法

    • 考虑到低四位完全相同 只用互换高四位的第六位就可以实现大小写互换

    • 互换高四位的某一位而不改变低四位,我们联想到位运算中的按位异或^ 关于按位异或 详见按位异或

    • 由按位异或的知识,我们可以寻找一个数,使得任意的一个八位二进制数与它进行异或操作后,高四位的第六位01取反,低四位不变

    • 回顾我们的目标 假如把'A'变为'a' 我们需要把01000001变为01100001,也就是把第六位的0变为1 。

    • 我们找到这个数了!它的二进制是00100000 十进制是32

    • 01000001^00100000=01100001,是不是很神奇?同理把小写字母'a'变为'A'也只需要把它与32进行按位异或操作就可以啦~

    #include<stdio.h>
    int main(){
        int i;
        char s[100];
        //读入字符串
        gets(s);
        for(i=0;s[i]!='\0';i++)
        {
            if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
            s[i]^=32;//核心语句,实现字符串中字母的大小写互换
        }
        printf("%s",s);
        return 0;
    }

    样例输入->

    Hello,Java!


    样例输出->

    hELLO,jAVA!



    评论 0

    暂无评论
    0
    0
    0
    立即
    投稿
    发表
    评论
    返回
    顶部