问答题
1. 假定输入的字符串中只包含字母和*号。请编写函数proc(),它的功能是:使字符串中前部的*号不得多于m个;若多于m个,则删除多余的*号;若少于或等于m个,则什么也不做,字符串中间和尾部的*号不删除。
例如,字符串中的内容为“****A*BC*DEF*G****”,若m的值为2,删除后,字符串中的内容则应当是“**A*BC*DEF*G****”;若m的值为4,则字符串中的内容仍为“****A*BC*DEF*G****”。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
void proc(char *a,int n)
{
}
void main()
{ char str[81];int m;
printf("Enter a string:\n");gets(str);
printf("Enter m:");scanf("%d",&m);
proc(str,m);
printf("The string after deleted:\n");
puts(str);
}
【正确答案】void proc(char *a,int n)
{
int i=0,k=0;
char *p,*t;
p=t=a;
while(*t=='*') //通过t的移动来数前面"*"号的个数k
{k++;t++;}
if(k>n) //当前个数k大于n时,删除多余的"*"号
{
while(*p)
{ a[i]=*(p+k-n); //通过p的移动来实现
i++;
p++;
}
a[i]='\0'; //最后用'\0'将字符串结束标志
}
}
【答案解析】 题目要求字符串前部的“*”号不得多于m。首先,要计算出字符串前部的“*”号的个数,与变量m进行比较。当字符串前部的“*”号多于m个时,删除多余的“*”号。规定不能用字符串函数处理,可以通过移动字符串的首指针来实现。