阅读下列函数说明和C函数,将应填入______处的语句写在答题纸的对应栏内。 [函数2.1说明] 函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样,称

admin2007-03-10  50

问题 阅读下列函数说明和C函数,将应填入______处的语句写在答题纸的对应栏内。
   [函数2.1说明]
   函数palindrome(char s[])的功能是:判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样,称该字符串是回文字符串,例如,“LEVEL”是回文字符串,而“LEVAL”不是。
   [函数2.1]
   int palindrome(char s[])
   {
        char *pi, *pj;
        pi=s;pj=s+strlen(s)-1;
        while(pi<pj&&  (1)  ) {
            pi++;pj--;
        }
        if(  (2)  ) return-1;
        else return 0;
   }
   [函数2.2说明]
   函数f(char *str,char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。
   例如,若str的值为“33123333435”,del的值为“3”,调用此函数后,将输出3个子字符串,分别为“12”,“4”和“5”。
   [函数2.2]
   void f(char *str,char del)
   {
        int i,j,len;
        len=strlen(str);
        i=0;
        While(i<len){
            While(  (3)  )i++;  /* 忽略连续的标志字符 */
                                 /* 寻找从str开始直到标志字符出现的一个子字符串 */
            j=i+1;
            while(str[j]!=del &&str[j]!’\0’)j++;
             (4) =’\0’;       /* 给找到的字符序列置字符串结束标志 */
            printf("%s\t",&str);
             (5);
        }
    }

选项

答案(1)*pi==*pj (2)pi<pj或 *pi != * pj,及其等价形式 (3)str[i]==del (4)str[j] (5)i=j+1

解析 [函数2.1]
   若一个字符串顺读和倒读都一样,称该字符串是回文字符串。如果使用数组s[n]来存储一个字符串,则根据这个定义,要判断一个串是否是回文字符串,需要循环比较:
   (1)该字符串的第一个元素s[0]和最后一个元素s[n-1]比较,如果s[0]不等于 s[n-1],则s不是回文字符串。
   (2)如果s[0]等于s[n-1],则第二个元素s[1]和倒数第二个元素s[n-2]比较,如果s[1]不等于s[n-2],则s不是回文字符串。
   (3)依次类推,直到最中间的2个元素也比较完毕(如果s有偶数个元素),或者只剩下中间的1个元素(如果s有奇数个元素)。
   当上述循环结束时,如果最中间的元素没有进行比较,就说明s不是回文字符串,如果进行了比较,则s是回文字符串。
   在函数2.1中,pi和pj是2个指向字符的指针,程序首先将s的首地址赋给pi(即 pi=&a[0]),将元素s[strlen(s)-1)的地址赋给pj(即pj=&s[strlen(s)-1]),当pi<pj并且pi和pj所指向的字符相等时进行循环:pi自增,pj自减。
   退出循环后,如果pi≥pj,则s是回文字符串(如果s有偶数个元素,则为pi>pj,如果 s有奇数个元素,则为pi=pj);如果pi<pj,则s不是回文字符串。
   [函数2.2]
   由函数2.2说明可知,此函数对给定的字符串进行从左至右的扫描,找出不包含标志字符的子字符串。
   在函数2.2中,i的初值为0,len表示字符串的长度。当i<len时进行循环:如果当前字符是标志字符,则不做处理,继续扫描以处理标志字符连成一串的情况。当退出该循环时,当前字符str不是标志字符,这时开始寻找从str开始,直到标志字符出现的一个子字符串(i保持不变,用j标记寻找的过程),给找到的字符序列置字符串结束标志,以便于后面语句的输出。
   输出语句结束后,就要继续寻找后面的不包含标志字符的子字符串,这时需要把指针 i移动j的后面,继续扫描。
转载请注明原文地址:https://jikaoti.com/ti/oeW7FFFM
0

最新回复(0)