您的位置:首页 > 其它

str库函数模拟实现

2017-04-18 04:37 232 查看
常见str函数功能表:

strcat——将字符串str2连接到str1之后,并返回指针str1

strncat——将字符串from 中至多count个字符连接到字符串to中,追加空值结束符。返回处理完成的字符串

strchr——返回一个指向str 中ch 首次出现的位置,当没有在str 中找ch到返回NULL

strrchr——返回一个指针,它指向字符ch 在字符串str,末次出现的位置,如果匹配失败,返回NULL

strcoll——比较字符串str1 和 str2, 很象strcmp. 但是, strcoll使用在目前环境中由setlocale()设定的次序进行比较。

strcmp——比较两个字符串是否相等比较字符串str1 and str2,相等返回0,大于返回大于0的数,小于返回小于0的数

strncmp——比较字符串str1 和 str2中至多n个字符

strlen——返回字符串str 的长度( 即空值结束符之前字符数目)

strcpy——复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to

strncpy——将字符串from 中至多count个字符复制到字符串to中,如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串

strstr——返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL

strspn——返回字符串str1中第一个不包含于字符串str2的字符的索引

代码实现:

strcat

char* MyStrcat(char *src, const char*dst)
{
assert(src && dst);
int count = 0;
char* ret = src;
while (*src) //如果把++合并写到上面来会多加一次
{
src++;
}
while (*src++ = *dst++)
{
;
}
return ret;
}
strncat

char* MyStrncat(char* str1, const char* str2,size_t n)
{
assert(str1 && str2);
char* tem = str1;

while (*str1)
{
str1++;
}

while (n--)
{
if (!(*str1++ = *str2++))
{
return tem;
}
*str1 = '\0';
}

return tem;
}

strrchr

const char* MyStrchr(const char* str, char ch)
{
assert(str);
while (*str)
{
if (*str == ch)
return str;
str++;
}
return NULL;
}
strchr

const char* MyStrrchr(const char* str,char ch)
{
assert(str);
const char* tmp = str;
while (*str++) //先让指针指向\0
{
;
}

while (--str != tmp) //只要str还没有减到tmp刚开始保存的初始位置
{
if (*str == ch)
return str;
}

return NULL;
}

strcoll

int MyStrcoll(const char* dst, const char* src)
{
assert(dst && src);
int ret = 0;
while (!(ret = *dst-*src))
{
dst++;
src++;
}
if (ret > 0)
return 1;
else if (ret < 0)
return -1;
else
return ret;
}
stcpy

char* MyStrcpy(char* dst, const char* src) //src为原字符串,dst为目标字符串
{
assert(src && dst);
char* ret = dst; //先让ret保存dst的起始位置
while (*dst++ = *src++) //将src中的值一次拷贝到dst之中
{
;
}
return dst;
}
strlen

size_t MyStrlen1(const char* str) //加const防止str被修改
{
assert(str); //断言,防止str为空指针或者野指针的情况
size_t count = 0;
while (*str++)
{
++count;
}
return count;
}

size_t MyStrlen2(const char* str)
{
assert(str);
const char* eos = str;
while (*eos++)
;
return (eos - str - 1);
}
strcmp

int MyStrcmp(const char* dst, const char* src)
{
assert(dst && src);
int ret = 0;
while (!(ret = *dst - *src))
{
src++;
dst++;
}

if (ret < 0)
return -1;

else if(ret > 0)
return 1;

return ret;
}
strncmp

int MyStrncmp(const char* str1, const char* str2, size_t n)
{
assert(str1 && str2);
int ret = 0;
while (!(ret = *str1 - *str2) && n--)
{
++str1;
++str2;
}

if (ret > 0)
{
return 1;
}

else if (ret < 0)
{
return -1;
}
return ret;
}

strncpy

char* MyStrncpy(char* str1, const char* str2, size_t n)
{
assert(str1 && str2);
if (!n)
return str1;

char* tmp = str1;
while (n && (*str1++ = *str2++))
{
n--;
}

if (n)
{
while (n--)
{
*str1--;
}
str1 = '\0';
}
return tmp;
}

strstr

const char* MyStrstr(const char*str1, const char* str2)
{
assert(str1 && str2);
while (*str1)
{
if (*str1++ == *str2++)
{
;
}
++str1;
return str1;
}
return NULL;
}
strspn

size_t MyStrspn(const char* str1, const char* str2)
{
size_t index = 0;
while (*str1++ == *str2++)
{
index++;
}
return index;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: