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;
}