计算机二级C语言 编程题 删除*类问题,我来为大家科普一下关于c语言计算机二级选择题?下面希望有你要的答案,我们一起来看看吧!

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';

}

,