大小写转换的秘密

要求:将一串字符中的大写字母(或者小写字母)全部转换为小写字母(或者大写字母)

很显然我们会想到通过大小写字母ASCII的区别,然后用if else判断后,在进行转换,代码如下:

#include 
int main(int argc, char *argv[])
{
    int i;
    char a[6] = "BasIc";
    char b[6] = "MiniX";
    for(i = 0;i<5;i++)
    {
        if((a[i] >= 97) && (a[i] <= 122))
            a[i] = a[i] - 32;
        if((b[i] >= 65) && (b[i] <= 90))
            b[i] = b[i] + 32;
     }
    printf("%s/n%s",a,b);
    return 0;
}

但是想想这样是不是太慢了呢?又或者如果我们要求不适用if语句,那又该怎么办呢?

我们看看大小写字母ASCII对应的二进制

A 100,0001 a 110,0001

B 100,0010 b 110,0010

C 100,0011 c 110,0011

… …

Z 101,1010 z 111,1010

得到答案了吧!!

大写字母的第5位(从0位开始)全部是0,而小写字母的第5位全是1,其实它们的差值为32 = 25 就是这个道理。。。

所以我们的程序可以这样改

#include 
int main(int argc, char *argv[])
{
    int i;
    char a[6] = "BasIc";
    char b[6] = "MiniX";
    for(i = 0;i<5;i++)
    {
        a[i] &= ~(1<<5);//全部 转化为大写 
        b[i] |=  (1<<5);//全部 转化为小写 
    }
    printf("%s/n%s",a,b);
    return 0;
}

只需要对第5位进行置0、置1操作就可以了,O(∩_∩)O~,简单吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值