• char*, wchar_t* 替换子串


    
    char* replace_a(char*s1,char*s2,char*s3=NULL)
    {
        char *p,*from,*to,*begin=s1;
        int c1,c2,c3,c;         //串长度及计数
        c2=strlen(s2);
        c3=(s3!=NULL)?strlen(s3):0;
        if(c2==0)return s1;     //注意要退出
        while(true)             //替换所有出现的串
        {
            c1=strlen(begin);
            p=strstr(begin,s2); //出现位置
            if(p==NULL)         //没找到
                return s1;
            if(c2>c3)           //串往前移
            {
                from=p+c2;
                to=p+c3;
                c=c1-c2+begin-p+1;
                while(c--)
                    *to++=*from++;
            }
            else if(c2<c3)      //串往后移
            {
                from=begin+c1;
                to=from-c2+c3;
                c=from-p-c2+1;
                while(c--)
                    *to--=*from--;
            }
            if(c3)              //完成替换
            {
                from=s3,to=p,c=c3;
                while(c--)
                    *to++=*from++;
            }
            begin=p+c3;         //新的查找位置
        }
    }
    
    wchar_t* replace_w(wchar_t* s1, wchar_t* s2, wchar_t* s3 = NULL)
    {
    	wchar_t* p, * from, * to, * begin = s1;
    	int c1, c2, c3, c;         //串长度及计数
    	c2 = wcslen(s2);
    	c3 = (s3 != NULL) ? wcslen(s3) : 0;
    	if (c2 == 0)return s1;     //注意要退出
    	while (true)             //替换所有出现的串
    	{
    		c1 = wcslen(begin);
    		p = wcsstr(begin, s2); //出现位置
    		if (p == NULL)         //没找到
    			return s1;
    		if (c2 > c3)           //串往前移
    		{
    			from = p + c2;
    			to = p + c3;
    			c = c1 - c2 + begin - p + 1;
    			while (c--)
    				* to++ = *from++;
    		}
    		else if (c2 < c3)      //串往后移
    		{
    			from = begin + c1;
    			to = from - c2 + c3;
    			c = from - p - c2 + 1;
    			while (c--)
    				* to-- = *from--;
    		}
    		if (c3)              //完成替换
    		{
    			from = s3, to = p, c = c3;
    			while (c--)
    				* to++ = *from++;
    		}
    		begin = p + c3;         //新的查找位置
    	}
    }
    
    
  • 相关阅读:
    12.12
    12.11
    1208
    1206
    2018-12-23丛晓强作业
    2018-12-17面向对象总结
    2018-12-17-丛晓强作业
    2018-12-13丛晓强作业
    2018-12-12丛晓强作业
    2018-12-11丛晓强作业
  • 原文地址:https://www.cnblogs.com/csnd/p/15613322.html
Copyright © 2020-2023  润新知