P025 删除除尾部的*号之外的*号 ★★

03-程序设计题 软件121, 唐鼎威 981浏览

所属年份:2010.9;2011.9;
假定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了尾部的*号之外,将字符中的其它的*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容应当是ABCDEFG*******。

#include <stdio.h>
void  fun( char *a, char *p )
{

}

main()
{  char  s[81],*t;
   printf("Enter a string:\n");gets(s);
   t=s;
   while(*t)t++;
   t--;
   while(*t=='*')t--;
   fun( s , t );
   printf("The string after deleted:\n");puts(s);
}

【考点分析】
本题考查:删除字符串中非尾部*号,删除的主要思想就是把不删除的字符保留起来。

【解题思路】
本题用两个循环语句来实现。第1个循环的作用是将指针p所指字母以前所有非*号的字符保留下来,即删除指针p以前所有的*号。第2个循环的作用是将指针p以后的所有*号保留下来。最后在新串的结尾加上结束符。

【参考答案】

void  fun( char *a, char *p )
{
  char *t=a;
  for(;t<=p;t++)
     if(*t!='*') 
        *(a++)=*t; 
  for(;*t!='\0';t++)
     *(a++)=*t;
  *a='\0';
  /*在字符串最后加上字符串结束标识*/
}