C-高级取子串函数_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C-高级取子串函数

C-高级取子串函数

 2010/12/4 11:51:51  deepfuture  http://deepfuture.javaeye.com  我要评论(0)
  • 摘要:自己写了一个高级版的取子串函数,可以完成正向取子串,反向取子串,1、调用:substr(取出的子串,源串,起始位置,长度)函数返回实际取到子串的长度其中长度可以为正数(从左边向右边取),长度为负数(从右边向左边取),长度可以超过实际能取到的子串长度,函数会智能判断,取长度范围内尽可能长的子串。例:intmain(void){chardc[20];char*sc="deepfuture.javaeye.com";substr(dc,sc,5,2);//dc为"fu"substr(dc,sc,5,
  • 标签:函数

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

1、调用:

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

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

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

例:

int main(void){

??? char dc[20];

??? char *sc="deepfuture.javaeye.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.javaeye.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;

}

?

发表评论
用户名: 匿名