关于C语言的题目,求每个步骤详解。谢谢!

有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母#include<stdio.h>#include<ctype.h>voidfun(cha... 有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母
#include <stdio.h>
#include <ctype.h>
void fun (char*p)
{ int i=0;
while(p[i])
{ if (p[i]==' '&&islower(p[i-1]) p[i-1]=p[i-1]-'a'+'A';
i++;
}
}
main()
{char sl[100]="ab cd EFG !";
fun(sl); printf("%s\n",sl);
}

运行结果是aB cD EFG !

这题我从 if (p[i]==' '&&islower(p[i-1]) p[i-1]=p[i-1]-'a'+'A'开始就不懂了
还有库函数的应用不大理解
所以求步骤详解!谢谢!!
展开
 我来答
shaoqi08110820
2012-08-21 · TA获得超过2508个赞
知道大有可为答主
回答量:1514
采纳率:100%
帮助的人:1720万
展开全部
#include <stdio.h>
#include <ctype.h>
void fun (char*p) //接收str数组的首地址
{ int i=0;
while(p[i]) //是否为结束标记'\0'
{ if (p[i]==' '&&islower(p[i-1]) p[i-1]=p[i-1]-'a'+'A'; //如果p[i]为空 且他的左边一个字符为小字母,就把它转化成大写字母 p[i-1]=p[i-1]-'a'+'A';相当p[i-1]=p[i-1]-32 这是ASCII运算
i++;
}
}
main()
{char sl[100]="ab cd EFG !";
fun(sl); printf("%s\n",sl);
}
islower()判定是否是小写字母,如果是则为真,否则为假
p[i-1]=p[i-1]-'a'+'A' 如'B'='b'-'a'+'A'=1+'A'='B'
追问
'B'='b'-'a'+'A'=1+'A'='B'  这个我不理解额……
追答
就是ASCII值
如'B'=66 'A'=65
'b'=98 'a'=97
'b'-'B'=32
所以
'A'='a'-32='a'-('b'-'B')
向露where
2012-08-23 · 超过12用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:18.7万
展开全部
if (p[i]==' '&&islower(p[i-1]) 这句话的意思应该是 如果小写字母后面 接着出来的字符是‘ ’, 那么就将这个小写字母变相应的大写字母。 小写字母a-z的ASCⅡ码值是97-122, 大写字母的A-Z的ASCⅡ码值是65-90; while(p[i]) 这句话就是在字母数组为空的时候结束循环,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
葛朋268
2012-08-22 · TA获得超过130个赞
知道答主
回答量:303
采纳率:0%
帮助的人:122万
展开全部
shao朋友解释的很好,学习C语言首先是语法 格式要懂,其次就是一些函数的用法了,要彻底把它弄明白,这样才会在出问题的时候想方法 去解决,程序一步步的看,每步都要看懂是什么意思才行,加油吧 朋友
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式