目录
size_t strlen ( const char * str );
char* strcpy(char * destination, const char * source );
char * strcat ( char * destination, const char * source );
int strcmp ( const char * str1, const char * str2 );
char * strstr ( const char *str1, const char * str2);
引言
在我们编写程序中,对字符串操作是家常便饭。正是因为如此,在库函数中有许多针对字符串操作的函数,熟练地使用这些函数可以帮助我们提高代码编写的效率。可以从代码逻辑的讲解和我们自己实现相应功能函数的方式来加深理解。
size_t strlen ( const char * str );
字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
含 '\0' )。
返回类型是size_t,参数类型是const char *,模拟实现代码如下:
size_t my_strlen(const char* p)
{
assert(p);
size_t ret = 0;
while (*p++ != '\0')
{
ret++;
}
return ret;
}
char* strcpy(char * destination, const char * source );
拷贝字符串
char* my_strcpy(char* des, const char* src)
{
assert(des && src);
char* ret = des;
while (*des++ = *src++)
{ }
return ret;
}
char * strcat ( char * destination, const char * source );
转接字符串
char* my_strcat(char* des, const char* src)
{
assert(des && src);
char* ret = des;
while (*des)
{
++des;
}
while (*des++ = *src++)
{
}
return ret;
}
int strcmp ( const char * str1, const char * str2 );
比较字符串大小
int my_strcmp(char* str1, char* str2)
{
assert(str1 && str2);
while (!(*str1 - *str2))
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
char * strstr ( const char *str1, const char * str2);
寻找子字符串
char* my_strstr(const char* des, const char* str)
{
assert(des && str);
char* ret = des;
char* cur1 = ret;
char* cur2 = str;
while (*ret)
{
cur1 = ret;
cur2 = str;
while (*cur1++ == *cur2++)
{
if (*cur2 == '\0')
return ret;
}
ret++;
}
return NULL;
}