P012 删除字符串前导的*号之外的*号 ★★

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

所属年份:2011.3
规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。

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

}

main()
{  char  s[81];
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
}

【考点分析】
本题考查:指针型变量定义;while循环语句;if语句条件表达式;字符串结束标识’\0’。

【解题思路】
函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1) 定义一个临时指针p,初始指向原串首地址;(2) 利用循环语句把字符串前导*号拷贝到原串;(3) 继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符’\0’。

【解题宝典】
要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。

【参考答案】

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';
}