假定输入的字符串中只包含字母和*号。请编写函数 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中,最后记得在字符串最后加上结束标志位。