鱼C论坛

 找回密码
 立即注册
查看: 2867|回复: 14

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

[复制链接]
发表于 2014-9-2 21:28:18 | 显示全部楼层 |阅读模式
3鱼币
#include<stdio.h>
char fun(char *c)
{
   if(*c<='Z'&&*c>='A') *c-='A'-'a';
   reture *c;
}
main()
{
   char s[81],*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
主要是红色字体部分不懂,求讲解

最佳答案

查看完整内容

*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就变为相应的小写字母了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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就变为相应的小写字母了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-2 22:30:57 | 显示全部楼层
*c-='A'-'a',这条语句的含义是把大写字母变成小写字母。

while(*p)//p是数组首元素的地址,判断字符串是否结束
   {
       *p=fun(p);//将一个字符带入函数,如果是大写,则变为小写
         putchar(*p);输出
         p++;//地址后移,指向下一个字符
    }
因此为B
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-3 00:27:09 | 显示全部楼层
过来学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-3 14:25:52 | 显示全部楼层
剑锋@2008 发表于 2014-9-2 22:30
*c-='A'-'a',这条语句的含义是把大写字母变成小写字母。

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


*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-3 16:42:02 | 显示全部楼层
while循环啊,fun函数传的是地址,返回字符,循环一次,指针移动一位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-3 17:36:31 | 显示全部楼层
神奇的小布丁 发表于 2014-9-3 14:25
*c-='A'-'a'把大写变成小写
请问这句是怎么理解的?

'A'-'a'代表大写与小写之间的ASCII间隔,用来表示一个定值,若大写字母减去这个定值则变成小写字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

原式计算顺序是   c=c-(‘A’-‘c’) 么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-4 07:06:13 | 显示全部楼层
神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是   c=c-(‘A’-‘c’) 么?

比如说 a-=1就是a=a-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-4 10:00:53 | 显示全部楼层
过来学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-4 14:17:46 | 显示全部楼层
神奇的小布丁 发表于 2014-9-3 18:58
原式计算顺序是   c=c-(‘A’-‘c’) 么?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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 ...

哦哦哦,这下懂了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-7 12:41:08 | 显示全部楼层
谢谢,非常喜欢了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-11 19:43:59 | 显示全部楼层
来看看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 23:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表