假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言

admin2010-05-05  23

问题 假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的K度,形参h给出了字符串中前导*号的个数,形参e给出了字符山中最后*号的个数。在编写函数时,不得使用c语言提供的字符串函数。
   例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。
   注意:部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仪在函数fun的花括号中填入所编写的若干语句。
   试题程序:
   #include <stdio.h>
   #include <conio.h>
   void  fun  (char *a;int n ,int h ,int e)
   {
   }
   main ( )
   {
     char s [81],*t,*f;
     int m=0,tn=0,  fn=0;
     printf("Enter a string :\n");
     gets (s);
     t=f=s;
     while (*t)
       {t++;m++; }    /*m为字符串的长度*/
     t--;            /*指针t指身字符串尾部*/
     while (*t==’*’)
       {t--; tn++; }
     /*指针t指向最后一个字母,tn统计尾部’*’的个数*/
     while (*f==’*’ )
       {f++;fn++;}
     /*指针f指向第一个字母,tn统计导’*’的个数*/
     fun( s, m, fn, tn);
     printf ("The string after deleted: \n");
     puts (s);
   }

选项

答案void fun (char *a, int n ,int h , int e) { int i,j=0 for (i=h; i<n-e; i++) /*第一个字母和最后一个字母之间的字符全不删除*/ a[j++]=a[i]; a[j]=’\0; /*在字符串最后加上结束标记*/ }

解析 注意循环变量i的初值(h)和终止值(n-e),由于h和e分别是a中的前导*和尾部*的个数,n是字符串的长度,所以从a[h])到a[n-e-1]之间的所有字符都要留下,而其他字符均删除。删除操作(即留下相应字符)现己由循环完成。
   本题技巧部分:
   void fun(char *a, int n, int h, int e )
   {a[n-e]=’\0;
   strcpy(a,a+h);}
   另外,请注意,a(n-e]的作用是使最后一个字母后出现字符串结束符。木程序采用了strcpy()库函数。
转载请注明原文地址:https://kaotiyun.com/show/yXID777K
0

相关试题推荐
最新回复(0)