目录
字符串函数模拟实现
1、strlen模拟实现
size_t my_strlen(const char* str)
{
assert(str);
size_t ret = 0;
while (*str)
{
str++;
ret++;
}
return ret;
}
2、strcpy模拟实现
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
3、strncpy模拟实现
char* my_strncpy(char* dest, const char* src, size_t sz)
{
assert(dest && src);
char* ret = dest;
while (sz)
{
*dest++ = *src++;
sz--;
}
if (sz)
{
while (--sz)
{
*dest++ = '\0';
}
}
return dest;
}
4、strcat模拟实现
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
5、strncat模拟实现
char* my_strncat(char* dest, const char* src,int sz)
{
assert(dest && src);
char* ret = dest;
while (*dest)
{
dest++;
}
while (sz--)
{
*dest++ = *src++;
}
dest = '\0';
return ret;
}
6、strcmp模拟实现
int my_strcmp(const char* str1, const char* str2)
{
int ret = 0;
while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
//代码一
//if (*str1 > *str2)
//{
// return 1;
//}
//else
//{
// return -1;
//}
//代码二
return *str1 - *str2;
}
7、strncmp模拟实现
int my_strncmp(const char* str1, const char* str2,int sz)
{
int ret = 0;
while (sz-- && !(ret = (unsigned char)*str1 - (unsigned char)*str2))
{
str1++;
str2++;
}
return ret;
}
8、strstr模拟实现
char* my_strstr(const char* str1,const char* str2)
{
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
char* cp = str1;
while (*cp)
{
s1 = cp;
s2 = str2;
while (*s1 && *s2 && (* s1 == *s2))
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
9、测试案例代码
int main()
{
char arr1[30] = "hello world";
char arr2[50] = "sakura0908";
printf("arr2的长度为 %zd\n", my_strlen(arr2));
char arr3[30] = { 0 };
my_strcpy(arr3, arr2);
printf("arr3 = %s\n", arr3);
char arr4[30] = { 0 };
my_strncpy(arr4, arr2, 6);
printf("arr4 = %s\n", arr4);
char arr5[50] = "csdn";
my_strcat(arr2, arr5);
printf("追加arr5之后的arr2为:%s\n", arr2);
char arr6[50] = "123456789";
my_strncat(arr2, arr6, 5);
printf("追加arr6之后的arr2为:%s\n", arr2);
char arr7[50] = "sakura0908csdn12345";
if (!my_strcmp(arr2, arr7))
{
printf("arr2和arr7相同\n");
printf("arr2 = %s\narr7 = %s\n", arr2, arr7);
}
else
{
printf("arr2和arr7不相同\n");
printf("arr2 = %s\narr7 = %s\n", arr2, arr7);
}
char arr8[50] = "sakura0908.";
if(!my_strncmp(arr2, arr8,12))
{
printf("arr2和arr8相同\n");
printf("arr2 = %s\narr8 = %s\n", arr2, arr8);
}
else
{
printf("arr2和arr8不相同\n");
printf("arr2 = %s\narr8 = %s\n", arr2, arr8);
}
return 0;
}