C语言截取指定长度字符串

/*  
 destin   :   返回字符串。  
 source   :   源字符串。  
 start   :   开始截取的位置。(取值从0开始,保持C字符串的特点;若start为负数,则表示从右往左截取。)  
 maxlen   :   截取的长度。(长度超过字符串的长度,按字符串实际长度计算。)  
 */  
 char   *substring(char   *destin,   char   *source,   int   start,   int   maxlen)  
 {  
 char   *p;  
 char   *address;  
 int   n   =   0; /*字符串的长度*/  
 int   oldstart;  
 int   i;  
  
 assert((destin!=NULL)   &&   (source   !=NULL));    
  
 address   =   destin;  
 /*求字符串长度*/  
 p   =   source;  
 while   (*p++   !=   '/0')  
 {  
 n++;  
 }  
  
 /*若start为负数,则从后往前*/  
 if(start   <   0)  
 {  
 /*如果开始的位置超过字符串长度,则不进行截取*/  
 if(-start   >   n-1)  
 {  
 return   NULL;  
 }  
 oldstart   =   start;  
 start   =   n   +   start-maxlen+1;  
 if(start   <   0)  
 {  
 start   =   0;  
 maxlen   +=   oldstart;  
 }  
 }  
  
 /*如果开始的位置超过字符串长度,则不进行截取*/  
 if(start   >   n-1)  
 {  
 return   NULL;  
 }  
  
 if(start+maxlen   >   n)  
 {  
 maxlen   =   n   -   start;  
 }  
  
 for(i=0,   p   =   source;   i<maxlen;   i++)  
 {  
 *destin++   =   *(p+(start++));  
 }  
 *destin   =   '/0';  
  
 return   address;  
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值