【关于字符串数组的】这题不会做,求解惑
#include<stdio.h>char fun(char *c)
{
if(*c<='Z'&&*c>='A') *c-='A'-'a';
reture *c;
}
main()
{
char s,*p=s;
gets(s);
while(*p)
{
*p=fun(p);putchar(*p);p++;
}
putchar('\n');
}
若运行时从键盘输入:OPEN THE DOOR<CR>(此处<CR>代表Enter键),则运行后的输出结果是()
A.oPEN tHE dOOR B.open the door
C.OPEN THE DOOR D.Open The Door
主要是红色字体部分不懂,求讲解
神奇的小布丁 发表于 2014-9-3 14:25
*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?
*c-='A'-'a'等价于*c=*c-('A'-'a').由于'A'-----'Z'的阿斯玛值为65------90;‘a’-----'z'的阿斯玛值为97到122;
大小写阿斯玛值正好相差32.即'A'-'a'=-32, 故*c=*c+32;*c为大写字母,因此*c+32就变为相应的小写字母了! *c-='A'-'a',这条语句的含义是把大写字母变成小写字母。
while(*p)//p是数组首元素的地址,判断字符串是否结束
{
*p=fun(p);//将一个字符带入函数,如果是大写,则变为小写
putchar(*p);输出
p++;//地址后移,指向下一个字符
}
因此为B 过来学习学习
剑锋@2008 发表于 2014-9-2 22:30
*c-='A'-'a',这条语句的含义是把大写字母变成小写字母。
while(*p)//p是数组首元素的地址,判断字符串 ...
*c-='A'-'a'把大写变成小写
请问这句是怎么理解的? while循环啊,fun函数传的是地址,返回字符,循环一次,指针移动一位 神奇的小布丁 发表于 2014-9-3 14:25
*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?
'A'-'a'代表大写与小写之间的ASCII间隔,用来表示一个定值,若大写字母减去这个定值则变成小写字母 twilight1223 发表于 2014-9-3 17:36
'A'-'a'代表大写与小写之间的ASCII间隔,用来表示一个定值,若大写字母减去这个定值则变成小写字母
原式计算顺序是 c=c-(‘A’-‘c’) 么? 神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是 c=c-(‘A’-‘c’) 么?
比如说 a-=1就是a=a-1 过来学习下 twilight1223 发表于 2014-9-4 07:06
比如说 a-=1就是a=a-1
a-=1就是a=a-1这个我懂
但是*c-='A'-'a';这个的计算顺序倒是是什么?没弄懂啊:sad 神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是 c=c-(‘A’-‘c’) 么?
恩 个位数 发表于 2014-9-4 14:17
*c-='A'-'a'等价于*c=*c-('A'-'a').由于'A'-----'Z'的阿斯玛值为65------90;‘a’-----'z'的阿斯玛值为9 ...
哦哦哦,这下懂了,谢谢{:5_95:} 谢谢,非常喜欢了! 来看看了
页:
[1]