微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将字母从大写转换为小写,反之亦然

如何解决将字母从大写转换为小写,反之亦然

我正在尝试解决以下问题:

编写一个键盘读取字符的程序。该程序 将打印:

字符的大写版本,如果是小写的 字符的小写版本,如果它是大写的 ASCII 代码 否则样本输入:a 样本输出:A

这是我的解决方案:

#include <stdio.h>

int main(){
    char upper[26] = {'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'};
    char lower[26] = {'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'};
    char c;
    scanf("%c",&c);
    for(int i=0; i <= 26; i++) {
        if(c==upper[i]) {
            printf("%c",lower[i]);
            break;
        } else if(c==lower[i]){
            printf("%c",upper[i]);
            break;
        } else if(i==26) { //not in the english alphabet
            printf("%d",c);
        }
    }
    return 0;
}

解决问题的方法有什么问题吗?

我的大学使用了一个带有隐藏测试的平台,我的解决方案为 2/15 测试提供了错误输出,并为另一个测试抛出了运行时错误,而以下代码通过了所有测试:

#include <stdio.h>


int main()
{
    char a;
    
    scanf("%c",&a);

    if(a>='A'&&a<='Z')
    {
        printf("%c",a+32);
    }
    else if(a>='a'&&a<='z')
    {
        printf("%c",a-32);
    }
    else
    {
        printf("%d",a);
    }
}

解决方法

如果唯一的目标是将单个字符转换为相反大小写,那么您可以考虑 ASCII 值:

大写字母的范围从6590,小写从97122。这意味着字符 c = 65c = A 相同。

考虑到这一点,您可以执行以下操作:

if (c > 96 && c < 122)
    c -= 32;
else if (c > 64 && c < 91)
    c += 32;

这样,如果 ASCII 值代表小写的 Char,只需减去 32(90 和 65 之间的差值)。 但是,如果 ASCII 值表示大写字符,则相反,并添加 32。

如果这样更容易理解,你也可以这样做:

if (c >= 'a' && c <= 'z')
    c -= 32;
else if (c >= 'A' && c <= 'Z')
    c += 32;

编辑:您可以查阅 ASCII 表 here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。