串的匹配
#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;
}