问答题
假定输入的字符串中只包含字母和*号。请编写函数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++; 1++;}
if(k>n) //当前个数k大于n时,则删除多余的
{
while(*p)
{a[i]=*(p+k-n); //通过p的移动来实现
i++;
p++;
}
a[i]="/0"; //最后用"/0"作为字符串结束标志
}
}
[解析] 题目中要求字符串前部的*不得多于m,首先要计算出字符串前部的*号的个数,与变量m进行比较。当字符串前部的*多于m个时,删除多余的*。规定不能用字符串函数处理,可以通过移动字符串的首指针来实现。