帮忙分析一下这道程序设计题
题目:规定输入的字符只包含字母和*号,除了字符串前导的*号之外,将串中其余*删除,主要程序如下: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循环的作用,谢谢了 展开
主要程序如下: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循环的作用,谢谢了 展开
展开全部
第一个while循环的目的是跳过前置*
第二个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中)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询