自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()

时间:2024-06-26 16:04:50

1.strlen()函数是求解字符串的有效长度的

1)非递归实现

size_t my_strlen(const char *str)

{

assert(str != NULL);  //断言,保证指针参数不能为空

size_t count = 0;

const char *pstr = str;   //参数保护

while (*pstr++ != '\0')

{

count++;

}

return count;

}

2)非递归实现

size_t my_strlen(const char *str)

{

assert(str != NULL);  //断言,保证指针参数不能为空

const char *pstr = str;   //参数保护

if (*str == NULL)

return 0;

else

return my_strlen(str + 1) + 1;

}

2.strcat()字符串连接函数

char* my_strcat(char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

char *pstr1 = str1;

const char* pstr2 = str2;

while(*pstr1 != '\0')

{

pstr1++;

}

while (*pstr2!= '\0')

{

*pstr1++ = *pstr2++;

}

*pstr1 = '\0';

return str1;

}

3.strcpy()字符串拷贝函数

char* my_strcpy(char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

char *pstr1 = str1;

const char* pstr2 = str2;

while (*pstr2!= '\0')

{

*pstr1++ = *pstr2++;

}

*pstr1 = '\0';

return str1;

}

4.strcmp()字符串比较函数

int my_strcmp(const char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

const char *pstr1 = str1;

const char* pstr2 = str2;

while (*pstr2!= '\0'&&*pstr2!='\0')

{

if (*pstr1 > *pstr2)

return 1;

else if (*pstr1 < *pstr2)

return -1;

pstr1++;

pstr2++;

}

while (*pstr1 != '\0'&&*pstr2 == '\0')

return 1;

while (*pstr1 == '\0'&&*pstr2 != '\0')

return -1;

return 0;

}

以上函数虽然可以实现字符串的拷贝函数,但是能不能做的更好呢?下面给出另一种实现方法:

int my_strcmp(const char *str1,const char* str2)

{

assert(str1 != NULL&&str2!=NULL);

const char *pstr1 = str1;

const char* pstr2 = str2;

int result = 0;

while (*pstr2!= '\0'||*pstr2!='\0')

{

result = *pstr1 - *pstr2;

if (result != 0)

break;

pstr1++;

pstr2++;

}

if (result>0)

return 1;

else if (result<0)

return -1;

return result;

}