strlen:求字符串长度
size_t strlen ( const char * str );
- 字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包
- 含 '\0' )。
- 参数指向的字符串必须要以 '\0' 结束。
- 注意函数的返回值为size_t,是无符号的( 易错 )
模拟实现如下:
int my_strlen(const char* arr)
{
int count = 0;
while (*arr != '\0')
{
arr++;
count++;
}
return count;
}
strcpy: 实现字符串的拷贝
char* strcpy(char * destination, const char * source );
- 源字符串必须以 '\0' 结束。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
模拟实现如下:
char* my_strcpy(char* arr1, const char* arr2)
{
char* ret = arr1;
assert(arr1 != NULL);
assert(arr2 != NULL);
while (*arr2 != '\0')
{
*arr1 = *arr2;
arr1++;
arr2++;
}
*arr1 = *arr2;
return ret;
}
strcat:实现字符串的链接
char * strcat ( char * destination, const char * source );
- 源字符串必须以 '\0' 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
模拟实现如下:
char *my_strcat(char* arr1, const char* arr2)
{
char *ret = arr1;
assert(arr1 != NULL && arr2 != NULL);
while (*arr1 != '\0')
{
arr1++;
}
while (*arr2 != '\0')
{
*arr1 = *arr2;
arr1++;
arr2++;
}
*arr1 = *arr2;
return ret;
}
strcmp:实现字符串的比较
int strcmp ( const char * str1, const char * str2 );
标准规定:
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
模拟实现如下:
int my_strcmp(const char* arr1, const char* arr2)
{
assert(arr1 != NULL && arr2 != NULL);
while (*arr1 == *arr2)
{
if (*arr1 == '\0')
{
return 0;
}
arr1++;
arr2++;
}
if (*arr1 > *arr2)
{
return 1;
}
else
{
return -1;
}
}
strstr:找到第二个字符串在第一个字符串首次出现的位置
char * strstr ( const char *str1, const char * str2);
模拟实现如下:
char* my_strstr(const char* arr1, const char* arr2)
{
char *cp = arr1;
while (*cp != '\0')
{
char *s1 = cp;
char *s2 = arr2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
return (NULL);
}