实现自己的mystring.h

来源:互联网 发布:迅雷看看mac版 编辑:程序博客网 时间:2024/05/16 06:36

把常用的字符串处理函数写了一遍,没有考虑地址重叠。

/**************************************************/char* mystrcpy( char *destin, const char *source ){    if( destin == NULL ||  source == NULL )    {        return NULL;    }        char *addr = destin;    while( ( *destin++ = *source++ )  != '\0' );    return addr;}/**************************************************/int mystrlen( const char *source ){    if( source == NULL  )    {        return 0;    }    int count = 0;    while( *source++ != '\0' )    {        count++;    }    return count;} /**************************************************/char* mystrncpy( char *destin,const char *source, int num ){    if( destin == NULL ||  source == NULL )    {        return NULL;    }        int limit = mystrlen( source );    char *addr = destin;        if( num > limit )    {        return NULL;    }    else    {        while( num-- ){    *destin++ = *source++;}                *destin = '\0';return addr;    }}/**************************************************/char* mystrcat( char *destin, const char *source ) {    if( destin == NULL ||  source == NULL )    {        return NULL;    }    char *addr = destin;     while( *destin++ != '\0' );    destin--;    while( ( *destin++ = *source++ )  != '\0' );    return addr;}/**************************************************/char* mystrchr( char *source, char ch ){    if( source == NULL )    {        return NULL;    }    while( *source != '\0' && ( *source++ != ch ) );        return *source == '\0' ? NULL:--source;}/**************************************************/int mystrcmp( const char *destin, const char *source ){    if( destin == NULL ||  source == NULL )    {        return destin - source;    }        while( *destin && *source && ( *destin++ == *source++ ) );        return *( destin -1 ) != *( source -1 ) ? \    *( destin-1 ) - *( source-1 ) : *destin - *source;}/**************************************************/int mystrncmp( const char *destin, const char *source, int num ){    if( destin == NULL ||  source == NULL || num <= 0 )    {        return destin - source;    }     while( num-- > 0 && *destin && *source && ( *destin++ == *source++ ) );    return  *( destin-1 ) != *( source-1 ) || \            ( num == 0 && *destin && *source )  ? \    *( destin-1 ) - *( source-1 ) : *destin - *source;        //考虑当进行最后一次比较时,如果字符串有一个为结束符,那么实际没有进行++}/**************************************************/char* mystrstr( const char *source, const char *destin ){    if( destin == NULL || source == NULL || \    *destin == '\0' || *source == '\0' )    {        return NULL;    }        char *position = (char *)source;    char *head = (char *)destin;    while( *source )    {        position = (char *)source;    destin = head;        while( *destin && *source && *destin++ == *source++ );                if( *destin == '\0' && *( destin-1 ) == *( source-1 ) )    {    return position;    }    if( *source == '\0' )    {         return NULL;    }        source = position + 1 ;    }}


 

原创粉丝点击