- //列舉了部分常用的strcpy,strcmp,strcat,strchr,strstr,strpbrk...
- char *strcpy(char *dest, const char *src)
- {
- char *tmp = dest;
- while ((*dest++ = *src++) != '\0')
- ;
- return tmp;
- }
- char *strncpy(char *dest, const char *src, size_t count)
- {
- char *tmp = dest;
- while (count) {
- if ((*tmp = *src) != 0)
- src++;
- tmp++;
- count--;
- }
- return dest;
- }
- char *strcat(char *dest, const char *src)
- {
- char *tmp = dest;
- while (*dest)
- dest++;
- while ((*dest++ = *src++) != '\0')
- ;
- return tmp;
- }
- char *strncat(char *dest, const char *src, size_t count)
- {
- char *tmp = dest;
- if (count) {
- while (*dest)
- dest++;
- while ((*dest++ = *src++) != 0) {
- if (--count == 0) {
- *dest = '\0';
- break;
- }
- }
- }
- return tmp;
- }
- int strcmp(const char *cs, const char *ct)
- {
- signed char __res;
- while (1) {
- if ((__res = *cs - *ct++) != 0 || !*cs++)
- break;
- }
- return __res;
- }
- int strncmp(const char *cs, const char *ct, size_t count)
- {
- signed char __res = 0;
- while (count) {
- if ((__res = *cs - *ct++) != 0 || !*cs++)
- break;
- count--;
- }
- return __res;
- }
- char *strchr(const char *s, int c)
- {
- for (; *s != (char)c; ++s)
- if (*s == '\0')
- return NULL;
- return (char *)s;
- }
- char *strrchr(const char *s, int c)
- {
- const char *p = s + strlen(s);
- do {
- if (*p == (char)c)
- return (char *)p;
- } while (--p >= s);
- return NULL;
- }
- char *strnchr(const char *s, size_t count, int c)
- {
- for (; count-- && *s != '\0'; ++s)
- if (*s == (char)c)
- return (char *)s;
- return NULL;
- }
- size_t strlen(const char *s)
- {
- const char *sc;
- for (sc = s; *sc != '\0'; ++sc)
- ;
- return sc - s;
- }
- char *strpbrk(const char *cs, const char *ct)
- {
- const char *sc1, *sc2;
- for (sc1 = cs; *sc1 != '\0'; ++sc1) {
- for (sc2 = ct; *sc2 != '\0'; ++sc2) {
- if (*sc1 == *sc2)
- return (char *)sc1;
- }
- }
- return NULL;
- }
- void *memcpy(void *dest, const void *src, size_t count)
- {
- char *tmp = dest;
- const char *s = src;
- while (count--)
- *tmp++ = *s++;
- return dest;
- }
- int memcmp(const void *cs, const void *ct, size_t count)
- {
- const unsigned char *su1, *su2;
- int res = 0;
- for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
- if ((res = *su1 - *su2) != 0)
- break;
- return res;
- }
- char *strstr(const char *s1, const char *s2)
- {
- int l1, l2;
- l2 = strlen(s2);
- if (!l2)
- return (char *)s1;
- l1 = strlen(s1);
- while (l1 >= l2) {
- l1--;
- if (!memcmp(s1, s2, l2))
- return (char *)s1;
- s1++;
- }
- return NULL;
-
}
來源: http://blog.csdn.net/willib/article/details/38460691