我想在C中将小写字母转换为大写字母,反之亦然。我已经这样做了,但是当我使用像' _'或'。'或',' ....在输入中,我在输出上得到随机字符,就像广场内的问号一样。
输入:AAbb
输出:aaBB
输入:a_A
输出:A⍰a
如何使用符号进行此操作?
代码:
{{1}}
答案 0 :(得分:3)
不要改变任何你不想改变的东西。
替换:
a[i]=a[i]^32;
与
if (a[i] >= 'A' && a[i] <= 'Z' ||
a[i] >= 'a' && a[i] <= 'z')
{
a[i] = a[i] ^ 32;
}
如果你#include <ctype.h>
,你可以这样做:
a[i] = islower(a[i]) ? toupper(a[i])
: tolower(a[i]);
答案 1 :(得分:3)
...使用符号转换小写和大写字母
...当我使用像&#39; _&#39;或&#39;。&#39;或&#39;,&#39; ....在输入上我得到随机字符
使用isupper()
,tolower()
,toupper()
。这是切换案例的标准和高度便携式方式。考虑在各种平台上有超过26个字母。
#include <ctype.h>
#include <stdio.h>
int main(void ){
char a[50];
{
gets(a); // dubious, consider fgets().
int i,length=0;
for(i=0;a[i];i++){
unsigned char ch = a[i];
if (isupper(ch) {
a[i]= tolower(ch);
} else {
a[i]= toupper(ch);
}
}
printf("%s",a); // use `a` , not `&a`
}
}
如果代码想要在不使用标准函数的情况下切换大小写,并且知道char
是一个字母,则代码可以使用以下代码。它合理地假设A-Z和a-z相差一位,如ASCII和EBCDIC
// Avoid magic numbers like 32
a[i] ^= 'a' ^ 'A';
仍建议使用标准功能。
答案 2 :(得分:1)
C标准指定<ctype.h>
中的函数来处理基本字符集的大小写:
islower(c)
测试字符是否为小写isupper(c)
测试字符是否为大写tolower(c)
将任何字符转换为小写版本toupper(c)
将任何字符转换为大写字母以下是如何使用这些:
#include <ctype.h>
#include <stdio.h>
int main(void) {
char a[50];
if (fgets(a, sizeof a, stdin)) {
int i;
for (i = 0; a[i] != '\0'; i++) {
unsigned char c = a[i];
a[i] = islower(c) ? toupper(c) : tolower(c);
}
printf("%s", a);
}
return 0;
}
答案 3 :(得分:-2)
你不能。见ascii表。与小写字母的大写字母不同的是位5 00100000b,其小数等于32。 但这仅适用于信件。
你应该把ifs用来处理任何不是字母的东西。