假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。 例如,字符串中的内容为****A*BC*DEF*G

admin2010-11-26  19

问题 假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
   例如,字符串中的内容为****A*BC*DEF*G*******,若 n的值为2,删除后,字符串中的内容则应当是 **A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
   注意:部分源程序给出如下。
   请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入所编写的若干语句。
   试题程序:
   #include <stdio.h>
   #include <conio.h>
   void  fun (char Aa, int n)
   {
   }
   main ()
   { char  s[81];int n;
   printf ("Enter a string : \n") ;gets (s);
   printf ("Enter n : "); scanf ("%d", &n);
   fun( s,n );
   printf("The string after deleted :\n");
          puts (s);
   }

选项

答案void fun(char *a,int n) { int i=0,k=0; char *p,*t; p=t=a; /*开始时,p与t同时指向数组的首地址*/ while(*t==‘*’) /*用k来统计前部星号的个数*/ {k++; t++;} if(k>n) /*如果k大于n,则佼p的前部保留n个星号,其后的字符依次存入数组a中*/ {while(*P) {a[i]=*(p+ k-n); i++ p++; } a[i]=‘\0’; /*在字符串最后加上结束标志位*/ } }

解析 while() 循环的作用是计算出前部星号的个数;if()的作用是判断星号个数是否多于n个,若是则只保留n个星号,即从字符串前部的倒数第n个星号开始,到最后一个字符都存入数组a中,最后记得在字符串最后加上结束标志位。
转载请注明原文地址:https://jikaoti.com/ti/mnkiFFFM
0

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