Chinaunix首页 | 论坛 | 博客
  • 博客访问: 287298
  • 博文数量: 41
  • 博客积分: 2630
  • 博客等级: 少校
  • 技术积分: 702
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-30 15:56
文章分类

全部博文(41)

文章存档

2012年(2)

2011年(2)

2010年(3)

2009年(26)

2008年(8)

我的朋友

分类: C/C++

2009-03-31 22:03:15

#ifndef STRING_H_
#define STRING_H_

/* 求字符串长度 */
size_t strlen(const char* strSrc)
{
    if (strSrc == NULL)
        return 0;

    const char* p = strSrc;
    while (*p++ != '\0')
        ;
    return p-strSrc-1;
}

/* 字符串比较 相等返回0, 否则返回-1 */
int strequal(const char* s1, const char* s2)
{
    if (s1==NULL || s2==NULL)
        exit(1);

    if (s1 == s2)
        return 0;

    while ( *s1++ == *s2++ )
        ;

    if ( (*s1 != '\0') || (*s2 != '\0') )
        return -1;
    else
        return 0;
}

/* 字符串拷贝 */
char* strcpy(char* strDest, const char* strSrc)
{
    if (strDest==NULL || strSrc==NULL)
        return NULL;

    char* p = strDest;
//important


    while ( (*p++ = *strSrc++) != '\0' )
        ;

    return strDest;
}

/* 子串查找 */
char* strstr(const char* str, const char* substr)
{
    if ('\0' == substr)
        return (char*)str;

    const char* a = NULL;
    const char* b = substr;
    for (; *str != '\0'; ++str)
    {
        if (*str != *b)
            continue;

        a = str;
        while (1)
        {
            if (*b == '\0')
                return (char*)str;

            if (*a++ != *b++)
                break;
        }

        b = substr;
    }

    return NULL;

}

/* 字符串连接 */
char* strncat(char* strDest, const char* strSrc, size_t n)
{
    char* p = strDest;
    while (*p++ != '\0')
//locate p at '\0'

        ;

    while (n-- && (*p++ = *strSrc++) )
        ;
    *p = '\0';

    return strDest;

}

char* strcat(char* strDest, const char* strSrc)
{
    return strncat(strDest, strSrc, strlen(strSrc));
}


/* 字符串反转 */
char* strrev(char* str)
{
    char c;
    char* l = str;
    char* r = str;

    while (*r++ != '\0')
        ;
    r-=2;
//end of str(not '\0')


    while (l < r)
    {
        c = *r;
        *r-- = *l;
        *l++ = c;
    }

    return str;
}

/* 以字节为单位进行内存拷贝 */
void* memcpy(void* dest, const void* src, size_t nbytes)
{
    if (dest==NULL || src==NULL)
        return NULL;

    void* tmp = dest;

    if ( (char*)src+nbytes > (char*)dest)
    {
        src += nbytes-1;
        dest += nbytes-1;
        while (nbytes-- > 0)
            *((char*)dest--) = *((char*)src--);
    }
    else
    {
        while (nbytes-- > 0)
            *((char*)dest++) = *((char*)src++);
    }

    return tmp;
}

#endif

阅读(1502) | 评论(0) | 转发(0) |
0

上一篇:动态矩阵

下一篇:排序算法

给主人留下些什么吧!~~