break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">【案例描述】
break-word; clear: both; text-indent: 2em; color: rgb(24, 30, 51); font-family: PingFangSC, 微软雅黑, 黑体, Arial, Helvetica, sans-serif; font-size: 18px; background-color: rgb(255, 255, 255); line-height: 2;">下面定义的函数cut(s,m,n)作用是:从字符串s第m个字符开始截取n个字符。请将代码补充完整。
main()
{ char s[]="goodmorning";int m,n;
char *cut( A ),*p;
scanf("%d%d",&m,&n);
p=cut(s,m,n);
printf("%s",p);}
{ int i=0;
( C );
sub=(char *)malloc( D );//动态分配内存
if(m<1||n<1){*sub=0;return sub;}
while(*(s+i))
if( E )break;
if(i<m){*sub=0;return sub;}//m超出字符串长度
for(i=0;i<n;i++)//提取n个字符
{ ( F );
if(*(sub+i)==0)return sub;}
*(sub+i)=0;return sub;}
【案例分析】
A、在main函数后面定义的函数必须先声明再使用。
B、B空填写函数的参数及类型。
C、需声明sub变量。其后动态分配了内存,其类型应该是char *
D、需要为sub变量申请n+1个字节的内存单元
E、while循环用于定位到第m个字符
F、将s中的字符逐一复制到sub中
【参考代码】
main()
{ char s[]="goodmorning";int m,n;
char *cut(char[],int,int),*p;
scanf("%d%d",&m,&n);
p=cut(s,m,n);
printf("%s\n",p);
}
char *cut(char s[],int m,int n)//定义cut函数
{ int i=0;
static char *sub;
sub=(char *)malloc(n+1);//动态分配内存
if(m<1||n<1){*sub=0;return sub;}
while(*(s+i))//定位到第m个字符
if(++i==m)break;
if(i<m)//m超出字符长度
{ *sub=0;return sub;}
for(i=0;i<n;i++)//提取n个字符
{ *(sub+i)=*(s+m+i-1);
if(*(sub+i)==0)return sub;//提取的字符不足
}
*(sub+i)=0;//即*(sub+i)='\0'
return sub;
}