c语言 串操作,C语言,串操作

串的匹配

#include#include#include

void subStr(char *str1,char *sub,int len_sub,int start)

{

if(NULL==str1 || NULL==sub)

return;

char *ptr;

ptr=str1+start;

while(len_sub--)

{

*sub++ = *ptr++;

}

*sub='\0';

}

int match(char *str1,char *str2,int start)

{

if(NULL==str1 ||NULL==str2)

return 0;

int len_str1,len_str2;

int i;

char sub[10];

len_str1=strlen(str1);

len_str2=strlen(str2);

while(start{

subStr(str1,sub,len_str2,start);

if(!strcmp(str2,sub))

return start;

else

start++;

}

return 0;

}

int main()

{

char str1[20]="Hello,China,China!";

char str2[10]="china";

int pos;

pos=match(str1,str2,3);

if(pos > 0)

{

printf("Matched str2,pos=%d!\n",pos);

}

else

{

printf("Don't match str2!\n");

}

return 0;

}

串的删除

#include#include#include//第一种实现

int str_delete(char *str,int del_start,int del_len)

{

if(NULL==str)

return;

char *ptr1,*ptr2;

int len;

len=strlen(str);

ptr1=(char *)malloc(len * sizeof(char));

if(NULL==ptr1)

{

printf("Memory allocate fail!\n");

return;

}

memset(ptr1,0,len);

strncpy(ptr1,str,del_start);

ptr2=str;

ptr2+=(del_start+del_len);

strcat(ptr1,ptr2);

strcpy(str,ptr1);

free(ptr1);

return 0;

}

//第二种实现

int  str_delete(char *str,int del_start,int del_len)

{

if(NULL==str)

return;

char *ptr1,*ptr2;

int len,i;

len=strlen(str);

ptr1=str+del_start;

ptr2=str+del_start+del_len;

for(i=0;*ptr2!='\0';i++)

//for(i=0;i{

*ptr1++=*ptr2++;

}

*ptr1='\0';

return 0;

}

int main()

{

char str[20];

strcpy(str,"caijiecaijiecaijie");

str_delete(str,6,6);

printf("%s\n",str);

return 0;

}

串的插入

#include#include#include

int strInsert(char *old,char *insert,int start)

{

if(NULL==old || NULL==insert)

return;

char *ptr1,*ptr2;

int len_old;

int len_insert;

len_old=strlen(old);

len_insert=strlen(insert);

ptr1=(char *)malloc((len_old + len_insert) * sizeof(char));

if(NULL==ptr1)

{

printf("Memory allocate error!\n");

return 0;

}

memset(ptr1,0,(len_old + len_insert));

strncpy(ptr1,old,start);

strcat(ptr1,insert);

ptr2=old+start;

strcat(ptr1,ptr2);

strcpy(old,ptr1);

free(ptr1);

return 0;

}

int main()

{

char str1[20]="caijiecaijie";

char str2[10]="caihao";

strInsert(str1,str2,6);

printf("%s\n",str1);

}

串的替换

#include#include#include

//第一种实现

void replace(char *source,char *outPut,char *sub,char *rep)

{

char *pi, *po, *p;

int nsub, nrep, nLen;

pi = source;                    // 指向输入字符串的游动指针

po = outPut;                    // 指向输出字符串的游动指针

nsub = strlen(sub);             // 计算被替换串和替换串的长度

nrep = strlen(rep);

// 查找pi指向字符串中第一次出现替换串的位置,并返回指针(找不到则返回null)

p = strstr(pi, sub);

if(p) {

while(p) {

nLen = (int)(p - pi);         // 计算被替换串前边字符串的长度

memcpy(po, pi, nLen);         // 复制到输出字符串.

memcpy(po + nLen, rep, nrep);

pi = p + nsub;                // 跳过被替换串

po = po + nLen + nrep;        // 调整指向输出串的指针位置

p = strstr(pi, sub);          // 继续查找

}

strcpy(po, pi);                    // 复制剩余字符串

}

else

strcpy(po, pi);                  // 没有找到则原样复制

}

//第二种实现

void replace(char *source,char *outPut,char *sub,char *rep)

{

char *pc1,*pc2,*pc3;

int isource,isub,irep;

isource=strlen(source);                            //原串,被替换串,替换串的长度

isub=strlen(sub);

irep=strlen(rep);

pc1=outPut;                                        //pc1指向输出字符串的地址

while(*source!='\0')

{

pc2=source;

pc3=sub;

while(*pc2==*pc3 && *pc3!='\0' && *pc2!='\0'){ //查找需要被替换的字符串

pc2++;

pc3++;

}

if(*pc3=='\0')

{

pc3=rep;

while(*pc3!='\0')

*pc1++=*pc3++;

source=pc2;

}

else

*pc1++=*source++;

}

*pc1='\0';                                         //给输出字符串增加结束符

}

int main()

{

char s1[]="abbccdfdcdbbdcd";

char s2[]="dcd";

char s3[]="123456";

char s0[40];

replace(s1,s0,s2,s3);

printf("%s\n",s0);

return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值