liunx c语言指定字符串替换,linux c语言字符串函数replace,indexOf,substring等的实现

#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=str1;

inti=0;

p=strstr(str1,str2);

if(p==NULL)

return-1;

else{

while(str1!=p)

{

str1++;

i++;

}

}

returni;

}

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

intlastIndexOf(char*str1,char*str2)

{

char*p=str1;

inti=0,len=strlen(str2);

p=strstr(str1,str2);

if(p==NULL)return-1;

while(p!=NULL)

{

for(;str1!=p;str1++)i++;

p=p+len;

p=strstr(p,str2);

}

returni;

}

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

voidltrim(char*str)

{

inti=0,j,len=strlen(str);

while(str[i]!='/0')

{

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

i++;

}

if(i!=0)

for(j=0;j<=len-i;j++)

{

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

}

}

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

voidrtrim(char*str)

{

char*p=str;

inti=strlen(str)-1;

while(i>=0)

{

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

i--;

}

str[++i]='/0';

}

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

voidtrim(char*str)

{

ltrim(str);

rtrim(str);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值