开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情
计算机二级C语言程序设计题
题目:
假定输入的字符串中只包含字母和号。请编写函数fun(),它的功能是:除了字符串前导的号之外,将串中其他号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如字符串中的内容为:*****ABCDEFG********,删除后,字符串中的内容应当是:ABCDEFG***。
#include <stdio.h>
#include <stdlib.h>
void fun(char *a, char *h,char *p)
{
?
}
main()
{
char s[81],*t, *f;
void NONO ();
printf("Enter a string:\n");
gets(s);
t=f=s;
while(*t)
{
t++;
}
t--;
while(*t=='*')
{
t--;
}
while(*f=='*')
{
f++;
}
fun(s, f, t);
printf("The string after deleted:\n");
puts(s);
NONO();
system("pause");
}
void NONO()
{/* 本函数用于打开文件,输入数据,
调用函数,输出数据,关闭文件。 */
FILE *rf, *wf;
int i;
char s[81], *t, *f;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0; i<8; i++)
{
fscanf(rf, "%s", s);
t=f=s;
while(*t)
{
t++;
}
t--;
while(*t=='*')
{
t--;
}
while(*f=='*')
{
f++;
}
fun(s, f, t);
fprintf(wf, "%s\n", s);
}
fclose(rf);
fclose(wf);
}
题目分析:
将字符串进行定位,字符串前后的不变,字符串中间的号进行删减。
解题思路:
h和p分别指向第一个和最后一个字母,先将前面的号进行保存,再保存中间的不是号字符,然后保存末尾的*号,最后加上结束标识符。
参考答案:
void fun(char *a, char *h,char *p)
{
int i=0;
char *k=a;
/*将前导*号保存到a中*/
while(k<h)
{
a[i]=*k;
k++;
i++;
}
/*遍历中间的非*号字符*/
while(k<p)
{
/*如果不是*号则保存到a中*/
if(*k!='*')
{
a[i]=*k;
i++;
}
k++;
}
/*将末尾*号继续保存到a中*/
while(*k)
{
a[i]=*k;
i++;
k++;
}
a[i]='\0';
}
结果如下:
补充:
- 使用printf和scanf函数时,要在最前面加上#include“stdio.h”
- printf可以只有一个参数,也可以有两个参数。
- printf(“ 第一部分 ”,第二部分 );把第二部分的变量、表达式、常量以第一部分的形式展现出来!