c语言 用位预算符将大写字母转换成小写字母
答案:3 悬赏:80 手机版
解决时间 2021-03-14 09:08
- 提问者网友:愿为果
- 2021-03-13 23:12
已知char c 存放一大写字母,用位运算符将其转换成小写字母,写出实现的表达式,并解释原因。
最佳答案
- 五星知识达人网友:酒安江南
- 2021-03-13 23:55
大写字母与小写字母差别在2进制数值的第6位. 第6位1是小写,第六位0 是大写.
大写字母到小写字母运算:
unsigned char a=0x41,b;
b = a + 0x20; // 加 0x20, 就是 加 0010 0000
例如字母A, ASCII 值 0x41, 就是 0100 0001
加 0x20, 就成 0110 0001, 就是 0x61, 小写 a.
若用位运算符:
b = a | 0x20;
按位加, 同上面算术加结果一样.
A到Z,ASCII 值 0x41 到 0x5A (0101 0000).
a到z, ASCII 值 0x61 - 0x7A. (第6位添1)
大写字母到小写字母运算:
unsigned char a=0x41,b;
b = a + 0x20; // 加 0x20, 就是 加 0010 0000
例如字母A, ASCII 值 0x41, 就是 0100 0001
加 0x20, 就成 0110 0001, 就是 0x61, 小写 a.
若用位运算符:
b = a | 0x20;
按位加, 同上面算术加结果一样.
A到Z,ASCII 值 0x41 到 0x5A (0101 0000).
a到z, ASCII 值 0x61 - 0x7A. (第6位添1)
全部回答
- 1楼网友:詩光轨車
- 2021-03-14 01:00
修改后代码如下:
# include
# include
int main()
{
char str[20];
int i,j, a;//少了一个逗号
printf("输入字符串,一/停止转换");
gets(str);
for(i=0;str[i]!='\0';i++)
{
if(str[i]=='/')
{
j=i;
for(a=j;str[a]!='\0';a++)
printf("%c",str[a]);
break;//后面的就不转换了
}
if((str[i]>='a')&&(str[i]<='z'))
{
printf("%c",str[i]-32);
}
else printf ("%c", str[i]);//不是小写字母的原样输出
}
printf("\n");
return 0;
}
- 2楼网友:不想翻身的咸鱼
- 2021-03-14 00:20
首先说一个事实就是ascii字符a-z或者A-Z所对应的整数值都是连续的。比如说'a'如果对应123,那么'b'将对应124,以此类推。
因此不需要知道ascii字符对应的整数值也能够实现转换。
实现可以如下:
char bigAscii =...//来自于scanf或者其他什么地方
char smallAscii = bigAscii - 'A' + 'a';//bigAscii - 'A'求出了bigAscii相对于'A'的偏移量。然后加上'a'就可以得到对应的小写字母了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯