Chinaunix首页 | 论坛 | 博客
  • 博客访问: 317318
  • 博文数量: 113
  • 博客积分: 446
  • 博客等级: 下士
  • 技术积分: 1229
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-09 16:01
个人简介

Let's go!!!!!

文章分类

全部博文(113)

文章存档

2019年(5)

2018年(4)

2017年(9)

2016年(5)

2015年(39)

2014年(6)

2013年(28)

2012年(17)

分类: C/C++

2013-01-13 11:27:40

串的匹配
#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;
}
阅读(437) | 评论(0) | 转发(0) |
0

上一篇:C语言 队列

下一篇:同步通信

给主人留下些什么吧!~~