int strlen(const char *str)--->求字符串长度的函数
char *strcpy(char *dest,char *src)--->字符串拷贝
char *strcat(char *dest,char *src)--->字符串连接
char *strstr(const char *str1,const char *str2)--->字符串的查找(查找子串)
char *strcmp(char *str1,char *str2)--->字符串比较
void *memcpy(void *dest, const void *src, int count)--->内存拷贝
void *memmove(void *dest,const void *src,int count)--->内存移动
strlen:
int my_strlen(const char *str)//计数器方式
{
int count = 0;
assert(str);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int my_strlen(const char *str)//递归方式
{
assert(str);
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int my_strlen(char *str)//指针-指针 :表示两者相差的元素个数
{
const char *start = str;
while (*str != '\0')
{
str++;
}
return str - start;
}
int main()
{
system("pause");
return 0;
}
strcpy:
char *strcpy(char *dest, const char *src)
{
assert(dest != NULL);
assert(src != NULL);
char *ret = dest;
while (*dest++ = *src++)
//先进行了复制再进行了++,当赋值到终结符‘\0’时,不符合while的判断条件,退出循环
//而此时已经将所有的内容复复制到字符数组中了
{
;
}
return ret;
}
strcat:
char *strcat(char *dest, const char *src)
{
assert(dest && src != NULL);
char *ret = dest;
while(*dest != '\0')//先找到目标字符串的'\0'
{
dest++;
}
while (*dest++ = *src++)//先复制,再++。当复制遇到'\0'时,不符合while的判断条件,退出循环。此时,已将所有的内容复制到目标字符串数组中了
{
;
}
return ret;
}
strstr:
char *strstr(const char *str, const char *substr)
{
assert(str && substr);
const char *s1 = str;//创建两个临时变量
const char *s2 = substr;
if (*s2 == '\0')//如果子串为空,那么久直接返回str
{
return (char *)s1;
}
while (*str != '\0')//如果被查找的字符串不为空
{
s1 = str;
s2 = substr;
while (*s1 != '\0' && * s2 != '\0' && *s1 == *s2)//如果被查找的字符串和子串不为空并且两个一直相等的话...
{
s1++;
s2++;
}
if (*s2 == '\0')//当子串遇到'\0',表示查找结束
{
return str;//返回被查找的子串
}
str++;
}
return NULL;//如果被查找的字符串为空的话,直接返回空
}
strcmp:
char *strcmp(const char *str1, const char *str2)//...
{
int ret = 0;
while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1)
{
++str1;
++str2;
}
if (ret < 0)
return -1;
else if (ret > 0)
return 1;
return ret;
}