c语言实现strcpy,strcat,strcmp,strtok的函数功能

1.指针法实现strcpy(字符串复制的功能)
函数原型:char * strcpy(char *str1,const char *str2)

char * my_strcpy(char *str1,const char *str2)
{
	char *p=str1;
	assert(str1!=NULL && str2!=NULL);//断言
	while(*p)
	{
		p++;
		str2++;
	}
	return str1;
}

2.指针法实现strcat(字符串连接的功能)
函数原型:char *strcat(char *dest, const char *src)

char * my _strcat(char *str1,const char *str2)
{
	char *p=str1;
	assert(str1!=NULL && str2!=NULL);//断言
	while(*p!='\0')
	{
		p++;
	}
	while(*p==*str2)
	{
		p++;
		str2++;
	}
	return str1;
}

  1. 下标法实现strcmp(字符串比较)
    /*
    如果返回值小于 0,则表示 str1 小于 str2
    如果返回值大于 0,则表示 str1 大于 str2
    如果返回值等于 0,则表示 str1 等于 str2
    */
#include <stdio.h> 
#include <string.h>
#include <assert.h>
int my_strcmp(const char *str1,const char *str2)
{
	int  i=0;
	int  max_len=0;
	assert(str1!=NULL && str2!=NULL);
	max_len = strlen(str1)>=strlen(str2) ? strlen(str1) : strlen(str2);
	for(i=0;i<max_len+1;i++)
	{
		if(str1[i]<str2[i])
		{
			return -1;	
		}
		else if(str1[i]>str2[i])
		{
			return 1;	
		}	
	}
	return 0;	
}
  1. strtok(字符串拆串)
    函数原型:char *strtok(char *str, const char *delim)
//实现strtok函数原型 该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。
#include <string.h>
#include <stdio.h>
int instr(char ch,char *str)
{
	int i=0;
	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]==ch)
		{
			return 1;	
		}
	}	
	return 0;	
} 
char * my_strtok(char *str, const char *delim)
{
	char *q=NULL;
	char *k=NULL;
	static char *p=	NULL;
	if(str!=NULL)
	{
		p=str;	
	}
	if(p==NULL)
	{
		return NULL;	
	}
	q=p;
	while(!(instr(*q,delim)))
	{
		q++;		
	}
	*q='\0';
	k=p;
	p=q+1;
	while(instr(*q,delim))
	{
		p++;		
	}
	if(*p=='\0')
	{
		p=NULL;	
	}
	return k;
}
int main () 
{
    char str[80] = "xyzmkykmnzkmpkk";
	const char str1[100]={"km"};
    char *p=NULL;
    char *q=NULL;
    q=str;
    while(p=my_strtok(q,str1))
	{
		printf("%s\n",p);
		q=NULL;
	}
   return 0;
}



猜你喜欢

转载自blog.csdn.net/weixin_49061985/article/details/107968487