strstr
strstr函数声明:
char *strstr( const char *str1, const char *str2 );
该函数在str1中找str2,如果找到了,返回str2在str1中第一次出现的地址,没找到返回NULL。
模拟实现
char* m_strstr(char* arr1,const char* arr2)
{
assert(arr1 != NULL && arr2 != NULL);
char* a1 = arr1;
char* a2 = (char*)arr2;
if (*arr2 == 0)
{
return NULL;
}
while (*arr1)
{
a1 = arr1;
a2 = (char*)arr2;
while (*a1 && *a2 && (*a1 == *a2))
{
a1++;
a2++;
}
if (*a2 == '\0')
{
return arr1;
}
arr1++;
}
return 0;
}
strcat
函数声明
char *strcat(char *dest, const char *src)
该函数能在dest后追加src的内容
模拟实现
char* m_strcat(char* arr1, char* arr2)
{
char* p = arr1;
while (*arr1 != 0)
{
arr1++;
}
while (*arr2 != 0)
{
*arr1++ = *arr2++;
}
return p;
}
strcmp
函数声明
int strcmp(const char *s1,const char *s2);
该函数自左向右逐个按照ASCII码值进行比较,直到出现不同的字符或遇’\0’为止。
如果返回值 < 0,则表示 s1 小于 s2。
如果返回值 > 0,则表示 s1 大于 s2。
如果返回值 = 0,则表示 s1 等于 s2。
模拟实现
int my_strcmp(char* arr1, char* arr2)
{
assert(arr1);
assert(arr2);
int ret = 0;
while (!(ret = (unsigned char*)*arr1 - (unsigned char*)*arr2)&&*arr2)
{
arr1++;
arr2++;
}
if (ret < 0)
{
return -1;
}
else if (ret == 0)
{
return 0;
}
else
{
return 1;
}
}
int main()
{
char arr1[] = "abcde";
char arr2[] = "abq";
printf("%d ", strcmp(arr1, arr2));
}
strcpy
函数声明
char* strcpy(char* destination,const char* source);
该函数能将source开始的字符串复制到destination
模拟实现
char* my_strcpy(char* arr1, char* arr2)
{
if (arr1 == NULL || arr2 == NULL)
{
return NULL;
}
else
{
char* p = arr1;
while ((*arr1++ = *arr2++) != '\0')
{
;
}
return p;
}
}
int main()
{
char arr1[] = "hello world";
char arr2[] = "k";
;
printf("%s\n", my_strcpy(arr1, arr2));
}
strlen
函数声明
size_t strlen( const char *string );
该函数能计算字符串长度
int My_strlen(char *str)
{
int count = 0;
while (*str)
{
count++;
str++;
}
return count;
}
int main()
{
char str[] = "hello world";
printf("%d", My_strlen(str));
}