如何解决将字母从大写转换为小写,反之亦然
我正在尝试解决以下问题:
字符的大写版本,如果是小写的 字符的小写版本,如果它是大写的 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 值:
大写字母的范围从65
到90
,小写从97
到122
。这意味着字符 c = 65
与 c = 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 举报,一经查实,本站将立刻删除。