帮忙分析一下这道程序设计题

题目:规定输入的字符只包含字母和*号,除了字符串前导的*号之外,将串中其余*删除,主要程序如下:voidfun(char*a){inti=0,char*p=a;while... 题目:规定输入的字符只包含字母和*号,除了字符串前导的*号之外,将串中其余*删除,
主要程序如下:void fun(char* a)
{int i=0,char *p=a;
while(*p&&*p=='*')
{a[i]=*p;i++;p++};
while(*p)
{if(*p!='*')
{a[i]=*p;i++;}
p++;}
a[i]='\0';
}
请帮忙分析一下第一个,第二个while循环的作用,谢谢了
展开
 我来答
1蓝天下的雨
2013-08-13 · TA获得超过778个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:112万
展开全部
第一个while循环的目的是跳过前置*
第二个while循环就是删除其余的*
更多追问追答
追问
谢谢,我还是有点疑问,如果输入******123***45**,经过第一个while后前导星号保留,接下来是数字经过第二个while后123保留,123后的***在经过第一个while时也被保留了,这样无法完成删除中间星号的作用?请帮忙解答一下,多谢
追答
第一个while并没有循环到123后面的*,第一个循环在到1的时候就跳出循环了(此时p指向1,*p非空,但是*p=='*'不成立,所以条件while(*p&&*p=='*')不满足,此时跳出第一个while循环)
到第二个while循环的时候 *p=1 , if条件(*p!='*')是为了只把123这样的非*字符复制到数组a中,如果*p='*' 它就不执行if条件下面的复制语句 a[i] = *p,而只执行p++(目的是跳过*,也就是不把*复制到a中)
百度网友5d9fe08
2013-08-13 · 超过27用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:55.1万
展开全部
第一个while循环是用来将字符串前部的*符号复制到a数组中,第二个是用后来略去字母之间的*符号,将其他字符复制到数组中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式