阅读以下说明和C函数,填补代码中的空缺(1)~(5),将解答填入答题纸的对应栏内。 【说明】 函数removeDuplicates(char*str)的功能是移除给定字符串中的重复字符,使每种字符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇

admin2016-05-11  26

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

选项

答案(1)len<2 或len<=1 或等价表示 (2)i+1 或等价表示 (3)flag=1 或给flag赋值为任何一个不是0的值 (4)idx++ 或idx=idx+1 或等价表示 (5)idx 或等价表示

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

相关试题推荐
随机试题
最新回复(0)