阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。 [说明] 函数encode()和decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数encode()顺序考察已知字符串的字符,按以下规则逐组

admin2009-02-15  9

问题 阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
   函数encode()和decode()分别通过参数传递实现对字符串的变换和复原,返回值均为处理以后的字符串长度。变换函数encode()顺序考察已知字符串的字符,按以下规则逐组生成新字符串:
   (1)若已知字符串的当前字符不是数字字符,则复制该字符于新字符串中;
   (2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
   (3)若已知字符串的当前字符是一个数字字符,并且还有后继字符,设该数字值为n,则将其后继字符重复复制n+1次到新字符串中;
   (4)以上述一次变换为一组,在不同组之间另插入一个下划线‘_’用于分隔。
   例如:encode()函数对字符中26a3t2的变换结果为666_a_tttt_2。
   函数decode()用于经函数encode()处理的字符中,即复制不连续相同的单个字符,而将一组连续相同的字符(不超过10个)变换成一个用于表示重复次数的数字符和一个重复出现的字符,并在复原过程中掠过变换函数为不同组之间添加的一个下划线字符。
   注:假定调用变换函数encode()时的原始字符串中不包含下划线字符。
[函数]
int encode(char *instr,char *outstr)
{    char *ip, *op,c;
    int k,n;
    ip=instr;
    op=outstr;
    while ( * ip) {
        if(*ip>=’0’&&*ip<=’9’&&*(ip+l)) {
            n=*ip-’0’+1;
            c=(1);
            for (k=0;k<n;k++) *op++=c;
        }
        else *op++=*ip;
         (2);
        ip++;
    }
    if (op>outstr)  (3);
    *op=’\0’;
     (4);
}
int decode(char *instr,char *outstr)
{   char *ip,*op,c;
   int n;
   ip=instr; op=outstr;
   while ( *ip) {
        c=*ip;
        n=0;
        while( *ip==c&&n<10) {(5); n++; }
        if(n>1) *op+ + =’0’+n-1;
        * op++=c;
        if(*ip==’_’) ip++;
   }
   *op=’\0’;
     (4);
}

选项

答案(1) *++ip (2) *op++=‘_’ (3) op- -或- -op (4) return op - outstr (5) ip++

解析 在encode和decode函数中,参数ip和op分别指向输入字符串和输出字符串。
(1)读到一个非零数字n时,读取其后一个字符放入c,将其循环写入输出字符串n遍;
(2)完成一组变换后,应向输出字符中中添加一个下划线字符;
(3)如果输出字符串不空,应删除其末尾多余的下划线字符;
(4)根据程序说明,此处应返回输出字符串的长度,这里用尾、首位置指针的差表示;
(5)此处while循环的作用是读取连续相同的若干字符,输入字符串的位置指针应后移。
转载请注明原文地址:https://kaotiyun.com/show/UbjZ777K
0

最新回复(0)