删除字串

/*判断第二个字符串是否为第一字符串的子串,如果是,则将该子串删除 
比如 bissrc = a123afed 
    littlesrc = afe; 
    返回a123d; 
*/
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h>  
//判断一个字符串是否为另一个的子串,如果是,返回该子串首字母所在的位置  
//如果不是,返回-1。  
int findsubstring(char bigsrc[],  const char littlesrc[])  
{  
    char *flagbig = bigsrc;                          
    char *flaglittle =littlesrc;      
    char *pbig,*plittle;  
    pbig = bigsrc;  
    plittle = littlesrc;  
       
    for (pbig = bigsrc; *pbig != '/0'; pbig++)  
    {  
        if (*pbig == *plittle)    
        {  
            flagbig = pbig;  
            flaglittle = plittle;                 
            plittle++;  
            flagbig++;  
            if (*plittle == '/0')                
               return  (flagbig - (plittle - littlesrc) - bigsrc);              
        }  
        else                              
            plittle = littlesrc;  
        if ((flagbig != bigsrc) && (*(pbig + 1) != *(flaglittle + 1)))     
        {                                                                             
            pbig = pbig - (flaglittle - littlesrc);           
            flagbig = bigsrc;                 
            flaglittle = plittle;  
            plittle = littlesrc;  
        }  
    }  
    return -1;  
}  
//字符删除,将src中第loc个字符删除  
int leespy(char src[],int loc)  
{  
    int len = strlen(src);  
    for (loc; loc < len; loc++)  
        *(src + loc) = *(src + loc + 1);  
    src[len] = '/0';  
}  
//删除子串  
int del_substr(char str[], const char  substr[])  
{  
    int ret;  
    int sublen = strlen(substr);  
    int tmp;  
    if (substr == NULL)  
    {  
        return 1;  
    }  
    ret = findsubstring(str, substr);  
    tmp = ret;  
    if (ret > 0)  
    {  
        for (ret; ret < tmp + sublen; ret++)  //由于每次只能删除1个,所以用循环删除  
            leespy(str,tmp);         
        return 1;  
    }  
    else 
        return 0;  
}  
int main (int argc, char *argv[])  
{  
    char src[] = "a123afed";  
    char little[] = "afe";  
    del_substr(src,little);  
    printf("%s/n",src);  
    return(0);  

/*判断第二个字符串是否为第一字符串的子串,如果是,则将该子串删除
比如 bissrc = a123afed
 littlesrc = afe;
 返回a123d;
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//判断一个字符串是否为另一个的子串,如果是,返回该子串首字母所在的位置
//如果不是,返回-1。
int findsubstring(char bigsrc[],  const char littlesrc[])
{
    char *flagbig = bigsrc;                    
    char *flaglittle =littlesrc; 
    char *pbig,*plittle;
    pbig = bigsrc;
    plittle = littlesrc;
    
    for (pbig = bigsrc; *pbig != '/0'; pbig++)
    {
        if (*pbig == *plittle) 
        {
            flagbig = pbig;
            flaglittle = plittle;    
            plittle++;
            flagbig++;
            if (*plittle == '/0')     
               return  (flagbig - (plittle - littlesrc) - bigsrc);           
        }
        else       
            plittle = littlesrc;
        if ((flagbig != bigsrc) && (*(pbig + 1) != *(flaglittle + 1)))  
        {                      
            pbig = pbig - (flaglittle - littlesrc);   
            flagbig = bigsrc;    
            flaglittle = plittle;
            plittle = littlesrc;
        }
    }
    return -1;
}
//字符删除,将src中第loc个字符删除
int leespy(char src[],int loc)
{
    int len = strlen(src);
    for (loc; loc < len; loc++)
        *(src + loc) = *(src + loc + 1);
    src[len] = '/0';
}
//删除子串
int del_substr(char str[], const char  substr[])
{
    int ret;
    int sublen = strlen(substr);
    int tmp;
    if (substr == NULL)
    {
        return 1;
    }
    ret = findsubstring(str, substr);
    tmp = ret;
    if (ret > 0)
    {
        for (ret; ret < tmp + sublen; ret++)  //由于每次只能删除1个,所以用循环删除
            leespy(str,tmp);      
        return 1;
    }
    else
        return 0;
}
int main (int argc, char *argv[])
{
    char src[] = "a123afed";
    char little[] = "afe";
    del_substr(src,little);
    printf("%s/n",src);
    return(0);
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lisan04/archive/2010/06/03/5645630.aspx#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值