神奇的小布丁 发表于 2014-9-2 21:28:18

【关于字符串数组的】这题不会做,求解惑

#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-2 21:28:19

神奇的小布丁 发表于 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就变为相应的小写字母了!

剑锋@2008 发表于 2014-9-2 22:30:57

*c-='A'-'a',这条语句的含义是把大写字母变成小写字母。

while(*p)//p是数组首元素的地址,判断字符串是否结束
   {
       *p=fun(p);//将一个字符带入函数,如果是大写,则变为小写
         putchar(*p);输出
         p++;//地址后移,指向下一个字符
    }
因此为B

低调哥 发表于 2014-9-3 00:27:09

过来学习学习

神奇的小布丁 发表于 2014-9-3 14:25:52

剑锋@2008 发表于 2014-9-2 22:30
*c-='A'-'a',这条语句的含义是把大写字母变成小写字母。

while(*p)//p是数组首元素的地址,判断字符串 ...


*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?

zhuweiyuxidian 发表于 2014-9-3 16:42:02

while循环啊,fun函数传的是地址,返回字符,循环一次,指针移动一位

twilight1223 发表于 2014-9-3 17:36:31

神奇的小布丁 发表于 2014-9-3 14:25
*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?

'A'-'a'代表大写与小写之间的ASCII间隔,用来表示一个定值,若大写字母减去这个定值则变成小写字母

神奇的小布丁 发表于 2014-9-3 18:58:32

twilight1223 发表于 2014-9-3 17:36
'A'-'a'代表大写与小写之间的ASCII间隔,用来表示一个定值,若大写字母减去这个定值则变成小写字母

原式计算顺序是   c=c-(‘A’-‘c’) 么?

twilight1223 发表于 2014-9-4 07:06:13

神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是   c=c-(‘A’-‘c’) 么?

比如说 a-=1就是a=a-1

银屏你我 发表于 2014-9-4 10:00:53

过来学习下

神奇的小布丁 发表于 2014-9-4 14:16:06

twilight1223 发表于 2014-9-4 07:06
比如说 a-=1就是a=a-1

a-=1就是a=a-1这个我懂
但是*c-='A'-'a';这个的计算顺序倒是是什么?没弄懂啊:sad

个位数 发表于 2014-9-4 14:17:46

神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是   c=c-(‘A’-‘c’) 么?

神奇的小布丁 发表于 2014-9-4 14:20:28

个位数 发表于 2014-9-4 14:17
*c-='A'-'a'等价于*c=*c-('A'-'a').由于'A'-----'Z'的阿斯玛值为65------90;‘a’-----'z'的阿斯玛值为9 ...

哦哦哦,这下懂了,谢谢{:5_95:}

2002wmj 发表于 2014-9-7 12:41:08

谢谢,非常喜欢了!

澎儿 发表于 2014-9-11 19:43:59

来看看了
页: [1]
查看完整版本: 【关于字符串数组的】这题不会做,求解惑