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