您的位置:首页 > 其它

模拟实现常用字符串函数

2015-12-01 16:51 260 查看
1、查找子字符串函数strstr的实现

char *  my_strstr(const char * dest, const char * src)//const保护字符串不被更改
{
assert(dest);
assert(src);     //断言
char * ptr1 = NULL;
char * ptr2 = src;
while (*dest)
{
ptr1 = dest;//保留匹配成功后的位置指针
src = ptr2;//保留匹配失败后,字串的同样指针
while (*dest == *src)
{
dest++; src++;
if (*src == '\0')
return ptr1;//匹配成功,返回首地址
}
dest++;
}
return NULL;//匹配失败
}
优点:程序简单易懂
缺点:查找的效率比较低

2、模拟字符串复制函数strcpy的实现

char * my_strcpy(char * dest, const char * src)
{
assert(dest);
assert(src);//断言
const char *ret = dest;//保留目标字符串的头指针

while (*src)
{
*dest++ = *src++;//逐个复制
}
*dest = '\0';//将‘\0’复制

return  ret;//返回目标字符串的首地址
}
缺点:复制时遇到'\0'就结束,而不能复制一些包含'\0'较多的字符串。
例如:char arr[10] = {0,0,0,0,0};

3、字符串长度计算函数strlen函数的3种实现

1)使用计数器
int my_strlen_count(const char * str)//计数器实现字符串长度计算函数
{
assert(str);//断言
int count = 0;
while (*str)
{
count++;
str++;
}
return count;//返回长度

}

2)利用指针相减
int my_strlen_ptr(const char * str)//利用指针相减实现字符串长度的计算
{
assert(str);//断言
const char * ret = str;

while (*str++)
{
;
}

return (str - ret - 1);//返回长度
}

3)利用函数递归求取
int my_strlen_recu(const char * str)//利用递归计算字符串长度
{
assert(str);//断言
if (*str != '\0')
{
return (my_strlen_recu(str + 1) + 1);
}
else
return 0;
}

4、字符串连接函数strcat的实现

char * my_strcat(char * dest, const char * src)//字符串连接函数
{
assert(dest);
assert(src);//断言
char *ret = dest;//保留目标字符串的头指针
while (*dest)
{
dest++;
}//找到'\0';

while (*dest++ = *src++)//将src连接到dest
{
;
}
return ret;//返回目标字符串的首地址
}

5、字符串比较函数strcmp的实现

int my_strcmp(const char *str1, const char *str2)//字符串比较函数
{
assert(str1);
assert(str2);//断言

while (*str1 == *str2)
{
str1++;str2++;
if ('\0' == *str1)
{
return 0;//相等
}
}
return *str1 - *str2;//不等,返回不相等字符的ASCII码的差
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息