string.h 函数的简单实现


c标准库中string.h头文件中几个函数的实现。参考了《C标准库》,用来交作业应该没什么大问题,但不保证没有bug。


标准库中原型:int strlen(const char *);
说明:返回字符串长度,不含'\0'。
实现:

int my_strlen(const char *s)
{
    const char *t;
    for(t = s; *t; t++)
	;
    return (t - s);
}


标准库中原型:char* strcpy(char* , const char *);
说明:复制字符串。
实现:
char* my_strcpy(char *t, const char *s)
{
    char *p = t;
    while (*t++ = *s++)
	;
    return p;
}



标准库中原型:char* strncpy(char* , const char * , int);
说明:复制字符串中n个字符。
实现:
char *my_strncpy(char *t, const char *s, int n)
{
    char *p = t;
    for(n--; n && (*t++ = *s++); n--)
	;
    *t = '\0';
    return p;
}


标准库中原型:int strcmp(const char* , const char *);
说明:比较两个字符串。
实现:
int my_strcmp(const char *s1, const char *s2)
{
    while (*s1++ == *s2++)
	;
    if (*s1 == '\0')
	return 0;
    else
	return (*s1 - *s2);
}


标准库中原型:int strncmp(const char* , const char *, int );
说明:比较两个字符串的前n个字符。
实现:
int strncmp(const char *t, const char *s, int n)
{
    for (n--; n && *t++ == *s++; n--)
	;
    return *t - *s;
}


标准库中原型:char* strcat(const char* , const char *);
说明:字符串连接。
实现:
char* my_strcat(char *t, char *s)
{
    char *p = t;
    while (*t)
	t++;
    while (*t++ = *s++)
	;
    return p;
}


标准库中原型:char* strncat(const char* , const char *, size_t);
说明:字符串连接。
实现:
char* my_strncat(char *t, const char *s, size_t n)
{
    char *p = t;
    while (*t)
 	t++;
    while (n && (*t++ = *s++)
	n--;
    *t = '\0';
    return p;
}


标准库中原型:char* strchr(const char* , int c);
说明:从字符串开头开始,查找字符串中第一个字符c的位置,返回指向该位置的指针,若不存在则返回NULL。
实现:
char* my_strchr(const char *s, int c)
{
    for (; *s != c; s++)
	if (*s == '\0')
	    return NULL;
    return (char *)s;
}


标准库中原型:char* strrchr(const char* , int c);
说明:从字符串开头开始,查找字符串中第一个字符c的位置,返回指向该位置的指针,若不存在则返回NULL。
实现:
char* my_strrchr(const char *s, int c)
{
    const char *p = s + my_strlen(s);
    while (p >= s && *p != c)
	p--;
    if (p <= s)
	return NULL;
    else
	return (char*)p;
}


标准库中原型:char* strstr(const char* t, const char* s);
说明:在字符串t中,查找是否含有s的字串,若有返回该字串的地址,否则返回NULL
实现:
char* my_strstr(const char* t, const char* s)
{
    const char *p, *q;
    if (*s == '\0')
	return NULL;
    for (; *t; t++){
	for (p = t, q = s; *p == *q; p++, q++)
	    ;
	if (*q == '\0')
	    return (char*)(t);
    }
    return NULL;
}


标准库中原型:void* memset(void* s, int c, int n);
说明:懒得说了
实现:
void* my_memset(void* s, int c, int n)
{
    char *p;
    for (p = s; n; n--)
	*p++ = c;
    return s;
}


标准库中原型:void* memcpy(void* s, const void* t, int n);
说明:懒得说了
实现:
void* my_memcpy(void *s, const void *t, int n)
{
    char *p;
    const char *q;
    for (p = s, q = t; n && (*p++ = *q++); n--)
	;
    return s;
}


标准库中原型:void *memmove(void *, const void *, int n);
说明:
实现:
void* my_memmove(void *t, const void *s, int n)
{
    char *s1;
    const char *s2;
    s1 = t;
    s2 = s;
    if (s2 < s1 && s1 < s2+n)
   	for (s1 += n, s2 += n;
	     n; n--)
 	    *--s1 = *--s2;
    else
	for (; n; n--)
 	    *s1++ = *s2++;
    return t;
}













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值