C-高级取子串函数

自己写了一个高级版的取子串函数,可以完成正向取子串,反向取子串,

1、调用:

substr(取出的子串,源串,起始位置,长度)

函数返回实际取到子串的长度

其中长度可以为正数(从左边向右边取),长度为负数(从右边向左边取),长度可以超过实际能取到的子串长度,函数会智能判断,取长度范围内尽可能长的子串。

例:

int main(void){

    char dc[20];

    char *sc="deepfuture.iteye.com";

    substr(dc,sc,5,2) ;//dc为"fu"

    substr(dc,sc,5,-2) ;//dc为"pf"  

    substr(dc,sc,5,-2) ;//dc为"pf"   

    substr(dc,sc,5,-10) ;//dc为"deepf",从右边向左边取子串(-10为负数),因为10超过了能取子串的长度,所以该函数取到开始 处就停止。

    substr(dc,sc,5,100);//dc为"future.iteye.com",从左边向右边取子串(100为正数),因为100超过了能取子串的长度,所以函数取到结束处就停止。

}

2、函数源代码

int substr(char* dchr,char *schr,int begin,int len){
//作者:刘兴(deepfuturelx@gmail.com)
//取子串函数,dchr为取好后的子串,schr为源串,返回成功取出的子串数目,len为负数,则从begin向头部移动(正向),否则向尾部移动(反向),begin为起始位置(从1开始),len为子串长度

    int slen=0;

    int rc=0;    

    if (begin<=0) begin=1;//起始位置为0时,会从1开始

    slen=strlen(schr)-begin;    

    if (slen<=0||len==0){//当len为0或begin的位置已经超过源串长度时,取空串

       *dchr=NULL;

       return rc;

    }

    if (len<0){//len为负数,表示从begin处向头部移动len个字符的子串,允许出现len移过头的现象(begin=3,len=-6,则取从位置1到位置3的子串)

        len=-len;

        if(len>strlen(schr)) begin=1;

        else if((begin-len)<=0){

            len=begin;

            begin=1;

        }

        else {

             begin-=len;

             begin++;

        }

    }



     begin--;

     schr+=begin;

     int i=0;

     for(i=0;i<len&&*schr!=0;i++){

        *dchr++ = *schr++;         

     }

     *dchr=0; 

     rc=i;

  return rc;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值