您的位置:首页 > 其它

string.h 函数的简单实现

2012-05-29 18:42 441 查看
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;
}













                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  null c 作业