C 字符串操作strlen/strcat/strcpy/strcmp/strchr/strstr自实现
一、实现
(1)strlen
int myStrlen(const char *str)
{
int len = 0;
while (*str++)
len++;
return len;
}
(2)strcat
char * myStrcat(char *dst, const char *str)
{
char *d = dst;
while (*dst) dst++;
while (*dst++ = *str++);
return d;
}
(3)strcpy
char * myStrcpy(char *dst, const char *str)
{
char *d = dst;
while (*dst++ = *str++);
return d;
}
(4)strcmp
int myStrcmp(const char *str1, const char *str2)
{
for (; (*str1&&*str2) && *str1==*str2;str1++,str2++);
return *str1 - *str2;
}
(5)strchr
char *myStrchr(const char *str,char ch)
{
while(*str)
{
if(*str==ch)
return str;
*str++;
}
return NULL;
}
(6)strstr
char *myStrstr(const char *str,char * dst)
{
if(*dst)
{
while(*str)
{
for(int i=0;*(str+i)==*(dst+i);i++)
{
if('\0'==*(dst+i+1))
return str;
}
str++;
}
return NULL;
}
else
return str;
}
二、测试
#include<stdio.h>
#include<string.h>
int myStrlen(const char *str);
char * myStrcat(char *dst,const char *str);
char * myStrcpy(char *dst, const char *str);
int myStrcmp(const char *str1, const char *str2);
char *myStrchr(const char *str,char ch);
char *myStrstr(const char *str,char * dst);
int main()
{
char * srcStr = "i love c!";
printf("strlen= %d\t",strlen(srcStr));
printf("myStrlen= %d\n", myStrlen(srcStr));
char cat1[1024] = "hello!";
strcat(cat1, srcStr);
printf("strcat= %s\t", cat1);
char cat2[1024] = "hello!";
myStrcat(cat2, srcStr);
printf("myStrcat= %s\n", cat2);
char cpy1[1024] = {0};
strcpy(cpy1,cat1);
printf("strcpy= %s\t", cpy1);
char cpy2[1024] = { 0 };
myStrcpy(cpy2,cat2);
printf("myStrcpy= %s\n", cpy2);
char *str1 = "abcgdefg";
char *str2 = "bbcgdefg";
if(0==strcmp(str1,str2))
printf("==\t");
else if(strcmp(str1, str2) <0)
printf("<\t");
else
printf(">\t");
if(0==strcmp(str1,str2))
printf("==\n");
else if(myStrcmp(str1, str2) <0)
printf("<\n");
else
printf(">\n");
printf("strchr= %s\t",strchr(str1,'g'));
printf("myStrchr= %s\n",myStrchr(str1,'g'));
printf("strstr= %s\t",strstr(str1,"cgd"));
printf("myStrstr= %s\t",myStrstr(str1,"cgd"));
return 0;
}
int myStrlen(const char *str)
{
int len = 0;
while (*str++)
len++;
return len;
}
char * myStrcat(char *dst, const char *str)
{
char *d = dst;
while (*dst) dst++;
while (*dst++ = *str++);
return d;
}
char * myStrcpy(char *dst, const char *str)
{
char *d = dst;
while (*dst++ = *str++);
return d;
}
int myStrcmp(const char *str1, const char *str2)
{
for (; (*str1&&*str2) && *str1==*str2;str1++,str2++);
return *str1 - *str2;
}
char *myStrchr(const char *str,char ch)
{
while(*str)
{
if(*str==ch)
return str;
*str++;
}
return NULL;
}
char *myStrstr(const char *str,char * dst)
{
if(*dst)
{
while(*str)
{
for(int i=0;*(str+i)==*(dst+i);i++)
{
if('\0'==*(dst+i+1))
return str;
}
str++;
}
return NULL;
}
else
return str;
}