一、strlen计算字符串长度函数;
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
C 库函数 – strlen() | 菜鸟教程 (runoob.com)
手写:(三种方法)
//1.普通计数法
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
//2.递归法
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//3.指针法
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
二、strcmp字符串比较函数;
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
C 库函数 – strcmp() | 菜鸟教程 (runoob.com)
手写如下:
int my_strcmp(const char* p1, const char* p2)
{
assert(p1 && p2);
while (*p1 == *p2)
{
if (*p1 == '\0')
{
return 0;
}
p1++;
p2++;
}
return *p1 - *p2;
}
三、strcpy字符串拷贝函数;
C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
C 库函数 – strcpy() | 菜鸟教程 (runoob.com)
手写如下:
char* my_strcpy(char *dest, const char *src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ == *src++);
return ret;
}
四、strcat 字符串追加函数;
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
C 库函数 – strcat() | 菜鸟教程 (runoob.com)
手写如下:
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *src++);
return ret;
}
五、strstr找子串函数;
C 库函数 char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。
C 库函数 – strstr() | 菜鸟教程 (runoob.com)
手写如下:
char* my_strstr(const char* s1, const char* s2)
{
assert(s1&&s2);
if (*s2 == '\0')
return (char *)s1;
char* ch1 = (char *)s1, *ch2 , *q;
while (*ch1)
{
ch2 = (char *)ch1;
q = (char *)s2;
while (*ch2 && *q && *ch2 == *q)
{
ch2++;
q++;
}
if (*q == '\0')
{
return ch1;
}
ch1++;
}
return NULL;
}