问答题
假定输入的字符串中只包含字母和*号。请编写函数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
("C: //WEXAM//24990001//in. dat", "r");
out=fopen
("C://WEXAM//24990001//out. dat", "w");
for(i=0; i<10; i++) {
fscanf(in, "%s", s);
fun(s);
fprintf(out, "%s/n", s);
}
fclose(in);
fclose(out);
}
【正确答案】
【答案解析】#incllide <stdio. h>
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";
1}
main( )
{
char s[81];
printf("Enter a
string:/n"); gets(s);
fun(8);
printf("the string
after deleted:/n"); puts(s);
NONO( );
}
NONO( )
{
FILE *in, *out;
int i; char s[81];
in=fopen
("C://WEXAM//24990001//in. dat","
r"),
out=fopen
("C://WEXAM//24990001//out. dat",
"w");
fox(i=0; i<10; i++) {
fscanf(in, "%s", s);
fun(s);
fprintf(out, "%s/n", s);
}
fclose(in);
fclose(out);
}
[解析] 本题所需要的功能是是处理一个输入的只含字母和“*”的字符串,除了字符串前导的“*”号之外,将串中其它“*’号全部删除。并且在编写函数时,不得使用C语言提供的字符串函数。这里根据题意,很快我们就知道需要使用循环语句和条件语句来进行功能的实现。第一步要自己输入字符串,这就需要格式输入函数;第二步就要进行功能函数了,这里的就要一开始是否有“*”的存在,有多少个“*”,这个是很重要的判断。因为根据题意虽然是要删除“*”,但是字符串前面的“*”是不用删除的,无论有多少个都不能删除,然后当没有“*”,或者跳过字符串前面“*”后,就要到达第一个字母了,字母保留,然后后面遇见“*”就删除,依次循环进行下去,一直到字符串结束,这些功能的实现就需要条件语句和循环语句的使用了;第三步将处理过后的字符串输出,得到新的字符串,程序就可以结束了。
本题主函数中需要输入一个字符串,然后进入。fun函数处理字符串,在fun函数中,就要实现题目要求我们写出的功能了。首先是判断字符串的开始是否为“*”,这里就用到while函数(这里因为有步骤的区别,所以这里用while比用if好),判断开始的字符是否为“*”,见程序第5~6行,这里需要顺次进行,因为开始无论有多少个“*”都不用删除,当出现字母时,就开始下一步了,因为已经出现了字母,所以后面出现的“*”一律删除,而字母时不用管的,所以这里就又需要if条件语句来判断是否为“*”然后赋值为空,见程序第9~12行,当程序进行到字符为空时代表字符串结束,程序就终止,这里就要用到while条件语句进行终止判断,见程序第7行。这样循环进行就能保留字符串前面的“*”并且删除后面出现的所有“*”了,然后fun函数执行完成就可以转到主函数中进行新字符串的输出了。
[考点] while循环语句,if条件语句