阅读以下函数说明和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; p=outstr;
while(*ip){
if(*ip>='0' && *ip<='9' && *(ip+1)){
n=(1);
c=(2);
for(k=0; k<n;k++)
*op++=c;
}
else (3);
*op++='_';
ip++;
}
if(op>outstr)op--;
(4);
return op-outstr;
}
int decode(char *instr, char *outstr){
char *ip, *op, c; int n;
ip=instr; p=outstr;
while(*ip){
c=*ip; n=0;
while(*ip==c&&n<10){
ip++; n++;
}
if((5))*op++='0'+n-1;
*op++=c;
if((6))ip++;
}
*op='\0';
return op-outstr;
}