问答题
1. 假定输入的字符串只包含字母和“#”号,请编写函数fun(),它的功能是:删除字符串中所有的“#”号。在编写函数时,不得使用C语言提供的字符串函数。
例如,若字符串中的内容为“##w#el##come###”,删除后,字符串中的内容则应当是“welcome”。
请勿改动main()函数与其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#define strcpy
void fun(char *s)
{
}
void main()
{
char str[81];
FILE *out;
printf("Enter a string:\n");
gets(str);
fun(str);
printf("The string after deleted:\n");
puts(str);
out=fopen("outfile.dat","w");
strcpy(str,"###T#ES#T#######");
fun(str);
fprintf(out,"%s",str);
fclose(out);
}
【正确答案】int i=0;char *p=s; //工作指针p指向字符串s
while(*p) //当p不指向字符串尾符
{
if(*p!='#') //指针p指向的字符不是"#"
{
s[i]=*p; //将p指向的字符复制到字符串s
i++; //s下标加1
}
p++; //指针加1,指向下一个字符
}
s[i]='\0'; //新串加尾符
【答案解析】 在while循环中,利用if判断表达式中每一个字符是否为“#”,如果不是,将其复制到字符串,否则跳过,这就实现了函数的功能。
(1)首先利用工作指针指向字符串,当指针不指向串尾时,就对字符串进行循环判断。
(2)在循环中利用if判断表达式字符是否为“#”,如果不是,将其复制到字符串,否则跳过。
(3)所有字符处理完后,记得在新串s的末尾加上结束符'\0'。