直接以代码的形式进行呈现了。
1.strlen
#include<stdio.h>
size_t my_strlen(const char* str)
{
const char* s;
for (s = str; *s; ++s) {}
return (size_t)(s - str);
}
int main()
{
char str[] = "Hello, world!";
size_t len = my_strlen(str);
printf("Length of '%s' is %zu.\n", str, len);
return 0;
}
2.strcpy
#include<stdio.h>
char* my_strcpy(char* p1, char* p2)
{
char* ret = p1;
assert(p1 && p2);
while (*p1++ = *p2++)
{
;
}
return ret;
}
int main()
{
char str0[20] = { 0 };
my_strcpy(str0, str);
printf(" %s\n", str0);
return 0;
}
3.strcmp
#include <stdio.h>
// 模拟实现 strcmp 函数
int my_strcmp(const char *s1, const char *s2) {
while (*s1 && (*s1 == *s2)) {
s1++;
s2++;
}
return *(const unsigned char *)s1 - *(const unsigned char *)s2;
}
int main() {
char str1[] = "Hello";
char str2[] = "World";
char str3[] = "Hello";
// 比较 str1 和 str2
int result = my_strcmp(str1, str2);
if (result < 0) {
printf("'%s' is less than '%s'\n", str1, str2);
} else if (result > 0) {
printf("'%s' is greater than '%s'\n", str1, str2);
} else {
printf("'%s' is equal to '%s'\n", str1, str2);
}
// 比较 str1 和 str3
result = my_strcmp(str1, str3);
if (result < 0) {
printf("'%s' is less than '%s'\n", str1, str3);
} else if (result > 0) {
printf("'%s' is greater than '%s'\n", str1, str3);
} else {
printf("'%s' is equal to '%s'\n", str1, str3);
}
return 0;
}
4.strcat
#include <stdio.h>
// 模拟实现 strcat 函数
char *my_strcat(char *dest, const char *src) {
char *ret = dest;
// 移动指针到 dest 的末尾
while (*dest) {
dest++;
}
// 从 src 的第一个字符开始复制,直到包括 '\0'
while ((*dest++ = *src++));
return ret; // 返回 dest 的原始值
}
int main() {
char dest[50] = "Hello, ";
char src[] = "world!";
my_strcat(dest, src);
printf("After strcat: '%s'\n", dest);
return 0;
}
5.strstr
char* my_strstr(const char* haystack, const char* needle) {
// 如果needle为空字符串,则返回haystack的起始地址
if (*needle == '\0') {
return (char*)haystack;
}
// 遍历haystack
for (const char* h = haystack; *h != '\0'; h++) {
// 如果当前字符与needle的第一个字符匹配,开始进一步检查
if (*h == *needle) {
const char* n = needle;
const char* h2 = h;
// 继续比较后续字符
while (*n != '\0' && *h2 == *n) {
h2++;
n++;
}
// 如果完成了needle的遍历,则找到了匹配,返回当前位置
if (*n == '\0') {
return (char*)h;
}
}
}
// 如果没有找到匹配,返回NULL
return NULL;
}
int main() {
const char* haystack = "Hello, World!";
const char* needle = "World";
char* result = my_strstr(haystack, needle);
if (result) {
printf("Found: %s\n", result);
}
else {
printf("Not found.\n");
}
return 0;
}