填空题
请补充函数fun(),该函数的功能是按条件删除一个字符串指定字符一半的数目,具体要求如下:如果该字符串所包含的指定字符的个数是奇数,则不予删除,如果其数目是偶数,则删除原串后半部分的指定字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,c中存放指定的字符。
例如:当a输入“abababa”,c=‘a’时,b的输出为“ababb”;
如果a的输入为“ababa”,则b的输出为“ababa”。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#define LEN 80
void fun(char a[],char b[],char C)
{
int i=0,j=0;
int n=0;
int m=0;
while(a[i]!=‘/0’)
{
if(a[i]==c)
n++;
i++;
}
{{U}} {{U}} {{/U}} {{/U}};
if(n%2)
{
while(a[j]!='/0')
{
b[j]=a[j];
j++;
}
b[j]='/0';
}
else
{
while(a[i]!='/0')
{
b[j++]=a[i];
if(a[i]==c)
m++;
if((m>n/2)&&(a[i]==c))
{{U}} {{U}} {{/U}} {{/U}};
i++;
}
{{U}} {{U}} {{/U}} {{/U}};
}
}
main()
{
char a[LEN],b[LEN];
char c;
clrscr();
printf("Enter the string:/n");
gets(a);
printf("Enter the character of the string deleted:");
scanf("%c",&c);
fun(a,b,c);
printf("The new string is:%s/n",b);
}
【正确答案】
1、[1] i=0 [2] j-- [3] b[j]='/0'
【答案解析】[解析] 填空1:执行完while循环后,变量i的值为数组a[]中元素的个数,而后面的while循环中通过变量i访问数组a[]的各元素,所以,在这里需要对变量i清零。填空2:当找到原字符串中后半部分的指定字符时,这个字符不应该存入数组b中,所以要将数组b的下标减l,让下一个非指定宁符去覆盖它。填空3:按条件删除后的字符串存于数组b后,还要在数组b的最后加上字符串结束标记符'/0'。