计算机二级C语言 编程题 删除*类问题,我来为大家科普一下关于c语言计算机二级选择题?下面希望有你要的答案,我们一起来看看吧!
c语言计算机二级选择题
计算机二级C语言 编程题 删除*类问题
第1题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
解题思路:
知识点:字符型数组、指针
对主函数说明如下:
main()
{ char s[81],*t,*f;
printf("Enter a string:\n");
//从键盘上得到字符串,存入数组s中
gets(s);
//让指针f、t都指向s数组
t=f=s;
//本循环,循环体只有t ,执行结束,指针t指向串尾
while(*t) t ;
//指针t减1,指向倒数第1个字符
t--;
//如果是*号则向前移动指针,直到指向倒数第1个非*字符
while (*t=='*') t--;
//f指针本来是指向首地址的,当是*向后指,直到指向正向第1非*字符
while (*f=='*') f ;
//用三个地址做参数调用函数
fun(s,f,t);
printf("The string after deleted:\n");puts(s);
NONO();
}
参考答案(以控制下标的方式)
说明:形参a,h,p,实际上指向同一数组的不同位置,它们之间运算可以得到字符下标,
分三段:第1段下标从0到h-a 第2段下标从h-a到p-a,第3段下标从p-a到串尾,第1、3段的字符直接保存,
第2段的字符单独处理。
void fun(char *a,char *h,char *p)
{
int i,t=0;
for(i=0;a[i];i )
{
if(i<=h-a)
a[t ]=a[i];
else if(i<p-a)
{
if(a[i]!='*')
a[t ]=a[i];
}
else
a[t ]=a[i];
}
a[t]='\0';
}
,