大哥大姐们,删除右边星号的程序,但是调用函数的部分不理解,求详细的解释,谢谢了!

浮生如梦VIP 2011-06-02 05:51:07
本程序是删除字符串右边所有的*号,高手们给出了程序,但是调用函数部分不理解,还望解释的
更清除一下,具体如下。


#include <stdio.h>
void main()
{
void Delete(char *s);
char a[90],*p;
p=a;
printf("输入一个字符串\n");
gets(a);
Delete(p);

printf("%s\n",a);



}

void Delete(char *s)
{
for(;*s;s++);//这句我理解的意思是:使循环能够进行下去。
while(*--s=='*');//这一句是怎么执行的?有什么作用?
*++s='\0';//不是删除右边的星号吗?我总感觉把结束符放在了前面,不能够实现该功能呀!





}
...全文
83 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shi3590 2011-06-03
  • 打赏
  • 举报
回复
LS说的已经够详细了。
其实遇到看不太懂的程序,可以断点debug单步一下,看看参数变化,也能找到答案。
AnYidan 2011-06-03
  • 打赏
  • 举报
回复


void Delete(char *s)
{
for(;*s;s++);// 字符串结尾字符时 '\0',指针指向字符串尾

while(*--s=='*'); // 向前移动指针,并判断是否指向 *,是则继续前移,不是推出

*++s='\0'; //是将从右边开始的那一串'*'的最左边的'*'置为'\0',在此截断字符串


}
蓝染忽右介 2011-06-03
  • 打赏
  • 举报
回复
来晚了!!!!
date_1002 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anyidan 的回复:]
C/C++ code


void Delete(char *s)
{
for(;*s;s++);// 字符串结尾字符时 '\0',指针指向字符串尾

while(*--s=='*'); // 向前移动指针,并判断是否指向 *,是则继续前移,不是推出

*++s='\0'; //是将从右边开始的那一串'*'的最左边的'*'置为'\0',在……
[/Quote]

这个比较容易理解
iunion 2011-06-03
  • 打赏
  • 举报
回复

void Delete(char *s)
{
for(;*s;s++); // 将指针s,移到字符串末尾 '\0'处,此时s指针为'\0'

while(*--s=='*'); // 将指针S前移一位(--s),判断s指针位置是否是 '*',如果是再将指针前移一位,继续判断,不是进入下一语句

*++s='\0'; //因为前面在查找'*'时多退了一位,所以现后移一位(++s),在置为'\0'

}

shun_qizi_ran 2011-06-02
  • 打赏
  • 举报
回复
从后往前扫描,如果是*号就继续向前,直到不是*号,这样只能是*号连着的
yrw8888888 2011-06-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 q191201771 的回复:]

for(;*s;s++);
是把s指向字符串最后去

while(*--s=='*');
是从字符串后面往前扫描到不等于'*'

*++s='\0'
是将从右边开始的那一串'*'的最左边的'*'置为'\0'

至于那些前置++后置++的东西你自己仔细拿捏一下吧

我认为把右边那一串'*'全部置'\0'更好
[/Quote]

up
就想叫yoko 2011-06-02
  • 打赏
  • 举报
回复
for(;*s;s++);
是把s指向字符串最后去

while(*--s=='*');
是从字符串后面往前扫描到不等于'*'

*++s='\0'
是将从右边开始的那一串'*'的最左边的'*'置为'\0'

至于那些前置++后置++的东西你自己仔细拿捏一下吧

我认为把右边那一串'*'全部置'\0'更好

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧