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;
}
- 下标法实现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;
}
- 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;
}