下面是实现库函数时用到的头文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
实现strstr
strstr用于判断字符串str2是否是str1的子串。如果是,则该函数返回str1字符串从str2第一次出现的位置开始到结尾的字符串;否则,返回NULL。
char* my_strstr(const char* str1, const char* str2)
{
//为了防止str1和str2被无意中修改,用const修饰
const char* s1 = str1;
const char* s2 = str2;
//创建一个新变量记录每次查找的位置
const char* start = str1;
assert(str1 != NULL);
assert(str2 != NULL);
//查找
if(*str2 == '\0')
return (char*)str1;
while(*start)
{
s2 = str2;
s1 = start;
while(*s1 && *s2 && *s1==*s2)
{
s1++;
s2++;
}
if(*s2 == '\0')
{
return (char*)start;
}
start++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret = my_strstr(arr1, arr2);
if(ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}
实现strchr
strchr用于在一个字符串中查找给定字符(一个无符号的字符)的第一次出现的位置。
char *my_strchr(char *str, char c)
{
assert(str != NULL);
while (*str)
{
if (*str == c)
{
return str;
}
str++;
}
return NULL;
}
int main()
{
char str[] = "abcdefghujiamin";
char c = 'h';
char* ret = my_strchr(str, c);
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}