自分で実現したC言語の文字列置換関数

4375 ワード

ありがとうございますhttp://blog.csdn.net/fyyy4030/article/details/8511476
C言語では文字列置換関数が提供されていません.ネットで見つけられた類似関数も一つだけに置き換えられます.全部を置き換えることはできませんが、仕事ではよくこの機能を使うので、一つの関数を実現します.この関数が使用した相関関数はすべて自分で実現し、ライブラリ関数を呼び出しませんでした.
         関連コードは以下の通りです.
/********************************************************************
*  Function:   my_strstr()
*  Description:              ;
*  Calls:        ;
*  Called By:    
*  Input:      ps:  ;       pd:  
*  Output:      ;
*  Return :     0:         ; 1:        ;
*  Author:      ChenZhiFa
*  Others:       ;
*  date of completion: 
*********************************************************************/
char * my_strstr(char * ps,char *pd)
{
	char *pt = pd;
	int c = 0;

	while(*ps != '\0')
	{
		if(*ps == *pd)
		{
			
			while(*ps == *pd && *pd!='\0')
			{
				ps++;
				pd++;
				c++;
			}
		}

		else
		{
			ps++;

		}

		if(*pd == '\0')
		{
			//sum++;
			return (ps - c);
		}
			c = 0;
			pd = pt;
	}

	return 0;
}

/********************************************************************
*  Function:   memcpy()
*  Description:               ;
*  Calls:        ;
*  Called By:    
*  Input:       src:  ;
                 count:      .
*  Output:      dest:      ;
*  Return :      dest;
*  Author:       ChenZhiFa
*  Others:        ;
*  date of completion: 
*********************************************************************/
void * memcpy(void * dest,const void *src,size_t count)
{
	char *tmp = (char *) dest, *s = (char *) src;

	while (count--)
		*tmp++ = *s++;

	return dest;
}

/********************************************************************
*  Function:   str_replace()
*  Description:              ,           
                          。
*  Calls:        memcpy();
*  Called By:     
*  Input:       p_source:        ; p_seach        ;
                 p_repstr:      ;
*  Output:      p_result:    ;
*  Return :                 ;
*  Author:       ChenZhiFa
*  Others:       p_result           ,         \0  ;
*  date of completion: 
*********************************************************************/
int str_replace(char *p_result,char* p_source,char* p_seach,char *p_repstr)
{

	int c = 0;
	int repstr_leng = 0;
	int searchstr_leng = 0;

	char *p1;
	char *presult = p_result;
	char *psource = p_source;
	char *prep = p_repstr;
	char *pseach = p_seach;
	int nLen = 0; 

	repstr_leng = strlen(prep);
	searchstr_leng = strlen(pseach);

	do{	
		p1 = my_strstr(psource,p_seach);

		if (p1 == 0)
		{
			strcpy(presult,psource);
			return c;
		}

		c++;  //       1;
		printf("  :%s\r
",p_result); printf(" :%s\r
",p_source); // nLen = p1 - psource; memcpy(presult, psource, nLen); // memcpy(presult + nLen,p_repstr,repstr_leng); psource = p1 + searchstr_leng; presult = presult + nLen + repstr_leng; }while(p1); return c; }
 
#define MAX 200
int main(void)
{
	int i = 0;

	char s[MAX] ={0};         //     
	char s1[MAX]={0};         //     
	char s2[MAX]={0};         //      
	char result_a[2000] = {0};//      ;

	char *p,*ptm,*pr;

	puts("Please input the string for s:");
	scanf("%s",s);

	puts("Please input the string for s1:");
	scanf("%s",s1);

	puts("Please input the string for s2:");
	scanf("%s",s2);

	ptm = s;
	pr = result_a;

    i = str_replace(pr,ptm,s1,s2);

	printf("  %d     ;\r
",i); printf(" :%s\r
",result_a); system("pause"); }