假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串

admin2013-04-02  44

问题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
    例如,字符串中的内容为:****A*BC*DEF*G**********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用c语言提供的字符串函数。
    注意:部分源程序在文件PROGl.C中。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(char *a, char *h,char *p)
{
}
main()
{char s[81],*t, *f;
   void NONO ();
   printf("Enter a string:\n");gets(s);
   t=f=s;
   while(*t)t++;
   t--;
   while(*t==’*’)t--;
   while(*f==’*’)f++;
   fun(s , f,t);
   printf("The string after deleted:\n");puts(s);
   NONO();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *in, *out ;
  int i ; char s[81], *t, *f ;
  in = fopen("in.dat","r");
  out = fopen("out.dat","w");
  for(i = 0 ; i < 10 ; i++) {
    fscanf(in, "%s", s);
    t=f=s;
    while(*t)t++;
    t--;
    while(*t==’*’)t--;
    while(*f==’*’)f++;
    fun(s, f, t);
    fprintf(out, "%s\n", s) ;
  }
  fclose(in);
  fclose(out);
}

选项

答案{ int j=0; char *q=a; while(*q&&q
解析 (1)首先,设置一个指针变量q指向字符串的头位置,并使用循环,将从字符串头开始到第一个字母的“*”拷贝到字符串a。
(2)然后对第一个字母到最后一个字母之间的字符进行循环判断是否为“*”,如果是则跳过,否则拷贝到字符串a。
(3)最后,将最后一个字母到串尾的“*”拷贝到a,然后在新生成的字符串尾加’\0’。
转载请注明原文地址:https://kaotiyun.com/show/uJJp777K
0

最新回复(0)