A-A+

阅读以下说明和C函数 填补代码中的空缺(1)~(5) 将解答填入答题纸的对应栏内。【说明】

2022-08-05 23:49:41 问答库 阅读 173 次

问题详情

阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对
应栏内。
【说明】
函数removeDuplicates(char *str)的功能是移除给定字符串中的重复字符,使每种字
符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇到重复出现的字符时,设
置标志,并将其后的非重复字符前移。例如,若str指向的字符串为“aaabbbbscbsss”,
则函数运行后该字符串为“abse”。
【c代码】
void removeDuplicates (char *str)
int i,len = strlen (str); /*求字符串长度*/
If((l) )return;/*空串或长度为1的字符串无需处理*l
for(i=0;i<len;i++) {
Int flag =O; /*字符是否重复标志*/
int m:
for(m =(2 ); m<len; m++){
if(str[i]==str[m] ) {
__(3)_;break;
}
}
if (flag){
Int n,idx = m;
/*字符串第idx字符之后、与str [i]不同的字符向前移*/
For(n=idx+l; n<len. n++)
if (str[n]!= str[i]) {
str[idx]= str[n]; (4);
}
Str[(5)]=; /* 设置字符串结束标志*/
}
}
}请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:
本题考查C语言基本应用。题目要求在阅读理解代码说明的前提下完善代码。字符串的运算处理是c程序中常见的基本应用。根据注释,空(1)处应填入的内容很明确,为“len<=1”或其等价表示。要消除字符串中的重复字符,需要扫描字符串,这通过下面的代码来实现:For(i=0;i<len;i++){intflag=Oj;/*字符是否重复标志*/intm:for(m=(2);m<len;m++)(if(str[i]==str[m]{(3),break;}*}......上面代码中.循环变量i用于顺序地记下字符串中每个不同字符首次出现的位置,那么后面的处理就是从i的下一个位置开始,考查后面的字符中有没有与它相同的(str[i]=sir[m]),因此空(2)应填入“i+l”或其等价表示。显然,当发现了重复字符时,应设置标志,空(3)处应填入“flag=l”或者给flag赋值为任何一个不是0的值。根据说明,发现与str[i]相同的第一个字符str[m]后,需要将其后所有与str[i]不同的字符前移,以覆盖重复字符str[m],对应的代码如下;if(flag){intn,idx=m;/*将字符串第idx字符之后、与str[1]不同的字符向前移*/for(n=idx+l,n<len.n++)if(str[n]!=str[i]}{str[idx]=str[n];(4)}Str[(5)]=’\0’;/*设置字符串结束标志*/}初始时,idx等于m,使str[n]覆盖str[idx]后,需要将idx自增,以便将后面与str[i]不同的字符继续前移,因此空(4)处应填入“idx++”或等价表示。由于后面字符前移了,所以字符串结束标志也需重新设置,空(5)处应填入“idx”。试题二参考答案(1)len<2或len<=l或等价表示(2)i+1或等价表示(3)flag=l或给flag赋值为任何一个不是O的值(4)idx++或idx=idx+l或等价表示(5)idx或等价表示

考点:空缺,函数