目录
0.前言
各类字符串函数具体可以看【C语言】各类字符函数与字符串函数-CSDN博客 哦~
1.模拟实现strlen函数
strlen函数是C语言的库函数,用来计算字符串中'\0'以前的字符个数。下面我们来试着模拟实现一下:
法1: 计数器
//法1:计数器
int my_strlen(const char* ps)
{
int sum = 0;
while (*ps++ != '\0')
{
sum++;
}
return sum;
}
int main()
{
char s[] = "abcdefg";
int ret = my_strlen(s);
printf("%d\n", ret);
return 0;
}
法2:递归
//法2:递归
int my_strlen(const char* ps)
{
if (*ps == '\0')
{
return 0;
}
else
{
return 1 + my_strlen(ps+1);
}
}
int main()
{
char s[] = "abcdefg";
int ret = my_strlen(s);
printf("%d\n", ret);
return 0;
}
法3:指针 - 指针
//法3:指针-指针
int my_strlen(char* ps)
{
char** pps = ps;
while (*ps != '\0')
{
ps++;
}
return ps - pps;
}
int main()
{
char s[] = "abcdefg";
int ret = my_strlen(s);
printf("%d\n",ret);
return 0;
}
2.模拟实现strcpy函数
strcpy是C语言中的库函数,用来将 s 字符串的内容拷贝到 s2 字符串中。具体模拟实现如下:
//模拟实现strcpy
char* my_strcpy(char* ps1, const char* ps)
{
char* ret = ps1;
while (*ps)
{
*ps1 = *ps;
ps1++;
ps++;
}
return ret;
}
int main()
{
char s[] = "abcdefg";
char s1[20] = { 0 };
char* ret = my_strcpy(s1, s);
printf("%s\n", ret);
return 0;
}
3.模拟实现strcat函数
strcat函数是C语言的库函数,用于将 s 字符串中'\0'所在位置及往后的位置串联进 s1 字符串中的内容,具体模拟实现如下:
//模拟实现strcat函数
char* my_strcat(char* ps, const char* ps1)
{
char* ret = ps;
while (*ps != '\0')
{
ps++;
}
while (*ps1 != '\0')
{
*ps = *ps1;
ps1++;
ps++;
}
return ret;
}
int main()
{
char s[20] = "abcdefg";
char s1[] = "hijklmhn";
char* ret = my_strcat(s, s1);
printf("%s\n", ret);
return 0;
}
4.模拟实现strcmp函数
strcmp函数是C语言的库函数,用于比较两个字符串的大小。具体模拟实现如下:
//模拟实现strcmp函数
int my_strcmp(const char* ps, const char* ps1)
{
while (*ps&&*ps1)
{
if (*ps > *ps1)
{
return 1;
}
else if (*ps < *ps1)
{
return -1;
}
ps++;
ps1++;
}
return 0;
}
int main()
{
char s[] = "abcdefg";
char s1[] = "abcdefl";
int ret = my_strcmp(s, s1);
printf("%d\n", ret);
return 0;
}
5.模拟实现strstr函数
strstr函数是C语言库函数,用于在 s 字符串中寻找是否存有 s1 字符串的内容,并返回 s 字符串中 s1字符串内容第一次出现的位置。具体模拟实现如下:
//模拟实现strstr函数
char* my_strstr(const char* ps, const char* ps1)
{
char* fix = (char*)ps;
char* mot;
char* mot1;
if (!*(char*)ps1)
{
return ((char*)ps);
}
while (*fix)
{
char* mot = fix;
char* mot1 = (char*)ps1;
while (*mot == *mot1 && *mot && *mot1)
{
mot++;
mot1++;
}
if (*mot1 == '\0')
{
return (char*)fix;
}
fix++;
}
return NULL;
}
int main()
{
char s[] = "abcdefg";
char s1[] = "bcde";
char* ret = my_strstr(s, s1);
printf("%s\n", ret);
return 0;
}
创作不易,点个赞呗~