问答题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它“*”号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。 例如, 字符串中的内容为:****A*BC*DEF*G*******,删除后字符串中的内容应当是:****ABCDEFG。 注意:部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>void fun(char *a){/*以下代码仅供参考*/int i=0,k;while(a[i]=='*')i++;k=i;while(a[i]!='\0')/*以下程序段实现非*字符前移*/{}a[k]='\0';}main(){char s[81];void NONO();printf("Enter a string:\n");gets(s);fun(s);printf("The string after deleted:\n");puts(s);NONO();}void NONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *in,*out;int i;char s[81];in=fopen("in.dat","r");out=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(in,"%S",s);fun(s);fprintf(out,"%s\n",s); } fclose(in); fclose(out); }
【正确答案】正确答案:void fun( char *a ) { int i=0,k; while(a[i]=='*') i++; k=i; while(a[i]!='/0') {if(a[i]!='*') a[k++]=a[i]; i++; } a[k]='/0'; }
【答案解析】解析:本题主函数中需要输入一个字符串,然后进入fun函数处理字符串,在fun函数中,就要实现题目要求我们写出的功能了。首先是判断字符串的开始是否为“*”,这里就用到while函数(这里因为有步骤的区别,所以这里用while比用if好),判断开始的字符是否为“*”,见程序第5~6行,这里需要顺次进行,因为开始无论有多少个“*”都不用删除,当出现字母时,就开始下一步了,因为已经出现了字母,所以后面出现的“*”一律删除,而字母时不用管的,所以这里就又需要if条件语句来判断是否为“*”然后赋值为空,见程序第9~12行,当程序进行到字符为空时代表字符串结束,程序就终止,这里就要用到while条件语句进行终止判断,见程序第7行。这样循环进行就能保留字符串前面的“*”并且删除后面出现的所有“*”了,然后fun函数执行完成就可以转到主函数中进行新字符串的输出了。