字符串函数及其模拟实现
1.strlen函数
strlen函数会返回一个类型为size_t的字符串的长度。
有三种方法可以来进行模拟实现
#include <stdio.h>
//法一
size_t My_strlen1(const char* str)
{
int count=0;
while(*str++)
{
count++;
}
return count;
}
//法二
size_t My_strlen2(const char* str)
{
int count=0;
while(*str++)
{
count++;
}
return count;
}
//法三
size_t My_strlen(const char* str)
{
if (*str == '\0')
return 0;
else
return 1 + My_strlen(str + 1);
}
int main()
{
char ch[]= "abcde";
size_t cmp = My_strlen(ch);
printf("%d",cmp);
return 0;
}
2.strcpy函数
模拟实现:
#include <stdio.h>
#include <assert.h>
char * My_ctrcpy(char* dest,const char* source)
{
assert(dest && source);
char* cmp = dest;
while (*dest++ = *source++)
{
; // 这是个较好的方法
}
return cmp;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
char* tmp = My_ctrcpy(arr2, arr1);
printf("%s",arr2);
return 0;
}
3.strcat函数
函数模拟:
#include <stdio.h>
char* My_strcat(char* dest, const char* source)
{
char* tmp = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *source++)
{
;
}
return tmp;
}
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "hijklmn";
char * cmp = My_strcat(arr1,arr2);
printf("%s",arr1);
return 0;
}
4.strcmp函数
需要强调一点:
两个字符串进行比较是使用其ASCLL码进行比较的,并且是从第一个开始比较,直至某一个字符串中的字符的ASCLL码值小于另一个的ASCLL码值。
并不是比较其长度
arr1="abcd"; //a b c
arr2="abd"; //a b d
//d大于c所以arr2大于arr1
两种方法的模拟实现:
#include <assert.h>
//法一
int My_strcmp(char* str1, char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\n')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
//法二
int My_strcmp1(char* str1, char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\n')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[] = "abcd";
char arr2[] = "abd";
int num = My_strcmp1(arr1, arr2);
if (num == 0)
{
printf("arr1=arr2");
}
else if (num > 0)
{
printf("arr1>arr2");
}
else
{
printf("arr1<arr2");
}
return 0;
}