热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

liunxc语言指定字符串替换,linuxc语言字符串函数replace,indexOf,substring等的实现

#include#include*将strSrc字符串中第一次出现的strDest字符串替换成strReplace*voidreplaceFirst(char**strSrc,ch

#include 

#include 

/*将strSrc字符串中第一次出现的strDest字符串替换成strReplace*/

void replaceFirst(char **strSrc,char *strDest,char *strReplace)

{

char str4[strlen(*strSrc)+1];

char *p;

strcpy(str4,*strSrc);

int nLenFirstPart = 0;

if((p=strstr(*strSrc,strDest))!=NULL)/*p指向strDest在strSrc中第一次出现的位置*/

{

while(*strSrc!=p && *strSrc!=NULL)/*将strSrc指针移动到p的位置*/

{

nLenFirstPart++;

(*strSrc)++;

}

memset(*strSrc,0,strlen(*strSrc));/*将strSrc指针指向的值变成/0,以此来截断strSrc,舍弃strDest及以后的内容,只保留strDest以前的内容*/

strncpy(*strSrc,str4,nLenFirstPart);/*strSrc后拼接上p前面的部分*/

strcat(*strSrc,strReplace);/*在strSrc后拼接上strReplace*/

strcat(*strSrc,strstr(str4,strDest)+strlen(strDest));/*strstr(str4,strDest)是指向strDest及以后的内容(包括strDest),strstr(str4,strDest)+strlen(strDest)就是将指针向前移动strlen(strDest)位,跳过strDest*/

}

}

/*将strSrc出现的所有的strDest都替换为strReplace*/

void replace(char **strSrc,char *strDest,char *strReplace)

{

char str4[strlen(*strSrc)+1],strRemain[strlen(*strSrc)+1],strFirstPart[256];

char *p;

strcpy(str4,*strSrc);

strcpy(strRemain,*strSrc);

int nLenFirstPart = 0;

memset(*strSrc,0,strlen(*strSrc));/*将strSrc指针指向的值变成0*/

memset(strFirstPart,0,sizeof(strFirstPart));

while((p=strstr(strRemain,strDest))!=NULL)/*p指向strDest在strRemain中第一次出现的位置*/

{

nLenFirstPart = 0;

while(&strRemain[nLenFirstPart] != p && strRemain[nLenFirstPart] != '\0')/*将strRemain指针移动到p的位置*/

{

nLenFirstPart++;

}

/*strSrc后拼接上p前面的部分*/

strncpy(strFirstPart,strRemain,nLenFirstPart);

strFirstPart[nLenFirstPart] = '\0';

strcat(*strSrc,strFirstPart);

strcat(*strSrc,strReplace);/*在strSrc后拼接上strReplace*/

strcpy(strRemain,p+strlen(strDest));    // strRemain指向去掉了最前面的strDest的p

}

strcat(*strSrc,strRemain);/*strstr(str4,strDest)是指向strDest及以后的内容(包括strDest),strstr(str4,strDest)+strlen(strDest)就是将指针向前移动strlen(strDest)位,跳过strDest*/

}

/*截取src字符串中,从下标为start开始到end-1(end前面)的字符串保存在dest中(下标从0开始)*/

voidsubstring(char*dest,char*src,intstart,intend)

{

char*p=src;

inti=start;

if(start>strlen(src))return;

if(end>strlen(src))

end=strlen(src);

while(i

{

dest[i-start]=src[i];

i++;

}

dest[i-start]='/0';

return;

}

/*返回src中下标为index的字符*/

charcharAt(char*src,intindex)

{

char*p=src;

inti=0;

if(index<0||index>strlen(src))

return0;

while(i

returnp[i];

}

/*返回str2第一次出现在str1中的位置(下表索引),不存在返回-1*/

intindexOf(char*str1,char*str2)

{

char*p&#61;str1;

inti&#61;0;

p&#61;strstr(str1,str2);

if(p&#61;&#61;NULL)

return-1;

else{

while(str1!&#61;p)

{

str1&#43;&#43;;

i&#43;&#43;;

}

}

returni;

}

/*返回str1中最后一次出现str2的位置(下标),不存在返回-1*/

intlastIndexOf(char*str1,char*str2)

{

char*p&#61;str1;

inti&#61;0,len&#61;strlen(str2);

p&#61;strstr(str1,str2);

if(p&#61;&#61;NULL)return-1;

while(p!&#61;NULL)

{

for(;str1!&#61;p;str1&#43;&#43;)i&#43;&#43;;

p&#61;p&#43;len;

p&#61;strstr(p,str2);

}

returni;

}

/*删除str左边第一个非空白字符前面的空白字符(空格符和横向制表符)*/

voidltrim(char*str)

{

inti&#61;0,j,len&#61;strlen(str);

while(str[i]!&#61;&#39;/0&#39;)

{

if(str[i]!&#61;32&&str[i]!&#61;9)break;/*32:空格,9:横向制表符*/

i&#43;&#43;;

}

if(i!&#61;0)

for(j&#61;0;j<&#61;len-i;j&#43;&#43;)

{

str[j]&#61;str[j&#43;i];/*将后面的字符顺势前移,补充删掉的空白位置*/

}

}

/*删除str最后一个非空白字符后面的所有空白字符(空格符和横向制表符)*/

voidrtrim(char*str)

{

char*p&#61;str;

inti&#61;strlen(str)-1;

while(i>&#61;0)

{

if(p[i]!&#61;32&&p[i]!&#61;9)break;

i--;

}

str[&#43;&#43;i]&#61;&#39;/0&#39;;

}

/*删除str两端的空白字符*/

voidtrim(char*str)

{

ltrim(str);

rtrim(str);

}



推荐阅读
  • 利用空间换时间减少时间复杂度以及以C语言字符串处理为例减少空间复杂度
    在处理字符串的过程当中,通常情况下都会逐个遍历整个字符串数组,在多个字符串的处理中,处理不同,时间复杂度不同,这里通过利用空间换时间等不同方法,以字符串处理为例来讨论几种情况:1: ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
  • c语言基础编写,c语言 基础
    本文目录一览:1、C语言如何编写?2、如何编写 ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼*madebyebhrz*#include#include#include#include#include#include#include ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
author-avatar
手机用户2502882485
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有