问题 问答题

假定输入的字符串中只包含字母和*号。请编写函数 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()库函数。

多项选择题
单项选择题