`
deepfuture
  • 浏览: 4412652 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80134
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70355
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103603
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:286588
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15056
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67801
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32292
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46075
社区版块
存档分类
最新评论

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;

}

 

1
0
分享到:
评论
3 楼 deepfuture 2010-11-27  
补充完毕,写了调用说明
2 楼 deepfuture 2010-11-27  
就是取子字符串,C语言没有提供这个函数,可能没写得清楚,还是补充一下比较好
1 楼 luweb 2010-11-26  
不明白有何高级之处?理解起来很晦涩...
到底是去函数字串,还是计算包含字串啊?

相关推荐

    substring-search:子串搜索算法的实现

    子串搜索是计算机科学中的一个核心问题,它在文本处理、数据挖掘、生物信息学等领域有着广泛的应用。本文将深入探讨Rabin-Karp算法,这是一种高效且实用的子串搜索方法,其主要思想源于数学上的滚轮指纹技术。在EPI...

    C语言-面试题目-汇总

    这些题目涵盖了C语言的基础知识,如变量、控制流、函数、数组、指针、字符串,以及更高级的概念,如递归、动态规划、内存管理、算法设计。面试者应熟练掌握这些知识点,并能灵活运用到实际问题中。

    C实现Replace替换函数

    在C语言中,实现一个`Replace`替换函数是一项基本任务,它可以帮助我们处理字符串,将字符串中的特定子串替换为另一个新的子串。这个功能在许多编程场景中都非常有用,例如文本处理、日志分析等。下面我们将深入探讨...

    在母串中查找某子串出现的最后位置

    总的来说,解决“在母串中查找某子串出现的最后位置”的问题需要理解字符串处理的基本原理,并可能涉及到一些高级的字符串搜索算法。无论是简单线性搜索还是更复杂的KMP或Boyer-Moore算法,都有其适用场景和优缺点,...

    数据结构实验5:串子系统.doc

    《数据结构实验5:串子系统》 ...通过这个实验,学生可以深入理解串的基本概念和操作,熟悉C语言处理字符串的方法,同时也能体验到模式匹配等高级功能的实现,这对提升编程技能和理解数据结构的实践应用具有重要意义。

    C语言写字符串函数及任意个数求和

    C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`&lt;string.h&gt;`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了更好地理解和掌握C语言,有时我们需要自己动手...

    C语言常用函数块分享给大家

    函数块可能包含更高级的字符串操作,比如查找子串、替换字符、截取字符串等。 4. **数学运算**:除了标准库中的数学函数,如`sqrt`、`pow`等,函数块可能提供了一些自定义的数学算法,比如快速幂运算、圆周率计算、...

    C语言参考手册之函数库

    C语言参考手册中的函数库部分涵盖了C编程中广泛使用的各种函数,这些函数是C标准库的核心组成部分,提供了处理输入输出、字符串操作、数学计算、内存管理、错误处理、类型检测等基本功能。以下是对各个部分的详细...

    C函数手册C函数手册

    《C函数手册》是一部关于C语言编程的重要参考资料,它涵盖了C语言中的各种标准库函数,是程序员日常开发不可或缺的工具书。本手册分为两个部分,分别为“C函数速查(全面点的).chm”和“C语言函数速查.chm”,两者都...

    C常用的LinuxC语言函数库

    ### C常用的Linux C语言函数库知识点详解 #### 一、引言 在Linux环境中进行C语言编程时,熟练掌握常用函数库是非常重要的。本文将详细介绍Linux中C语言函数库中的字符操作函数和字符串操作函数,帮助开发者更好地...

    浙江万里大一下计算机个人自主学习报告_2017.doc

    - DATE()、TIME()、CTOD() 等函数用于处理日期和时间。 - SUBSTR() 用于提取字符串中的子串。 - TYPE() 函数返回变量的数据类型。 - STUFF() 用于替换字符串中的子串。 - IIF() 函数提供条件判断功能。 - ASC...

    第6次课参考代码.zip

    2. **6-4-最长回文子串.c** 这个程序的目标是找到一个字符串中最长的回文子串,即正读反读都相同的子串。解决这个问题,可以使用动态规划或者Manacher's Algorithm。动态规划方法中,创建一个二维数组记录每个子串...

    C语言的常用函数手册

    以上只是C语言众多函数中的一部分,实际编程中还有更多高级和特定用途的函数。通过查阅《C函数速查.chm》这样的手册,你可以找到更详尽的函数用法和示例。熟练掌握这些函数,将使你在C语言编程中游刃有余。

    C语言系统函数索引

    C语言系统函数是C编程语言中的重要组成部分,它们提供了与操作系统交互的能力,使得程序员能够执行各种操作,如数学计算、字符串处理、输入/输出、内存管理和时间管理等。以下是一些主要的C语言系统函数的详细说明:...

    C语言编程常用函数大全

    这份"常用函数大全"很可能包含了许多C语言的基础及高级函数,涵盖了输入输出、字符串处理、数学计算、内存管理等多个方面。下面,我们将对这些常见的C语言函数进行详细的探讨。 首先,输入输出函数是任何程序与用户...

    Linux C 函数手册.rar

    Linux C 函数手册是C语言编程者在Linux环境下不可或缺的参考资料。这本手册详细介绍了大量在Linux系统中使用的C库函数,涵盖了从基本输入输出到高级系统调用的各种功能。以下是一些关键知识点的概述: 1. **标准...

    一个C语言常用字符串操作函数库.zip

    由于C语言本身并不内置对字符串的高级支持,因此程序员经常需要依赖一些标准库函数来处理字符串。本压缩包"一个C语言常用字符串操作函数库.zip"中可能包含了一系列常用的C语言字符串处理函数的实现,这些函数可以...

    LinuxC常用函数手册

    这份"LinuxC常用函数手册"为你提供了一份详尽的参考资料,涵盖了Linux C编程中的基础到高级的函数用法。以下是一些关键的知识点: 1. **标准输入输出**: - `printf`与`scanf`:用于格式化输出和输入,是C语言中最...

    C语言函数库查找.chm

    "C函数速查.chm"很可能包含了C语言标准库(如stdio.h, math.h, string.h等)中的函数详解,以及它们的用法示例。以下是一些C语言常用函数的简要介绍: 1. **输入/输出函数**: - `printf()`:用于格式化输出,如...

    C语言函数大全(着色版)

    《C语言函数大全(着色版)》是一本详尽且直观的C语言参考资料,它涵盖了C语言中广泛使用的各种函数,并且通过着色的方式帮助读者更好地理解和区分不同的函数类别和功能。这本书不仅包含了基本的输入输出、数学运算、...

Global site tag (gtag.js) - Google Analytics