天天看点

字符串处理函数C语言实现(一)

包含以下函数: //字符串查找将在下篇文章详细说明

size_t lm_strlen(const char *str);

size_t lm_strlen2(const char *str);

char * lm_strcpy(char *dest, const char *src);

char * lm_strncpy(char *dest, const char *src, size_t n);

char * lm_strncpy2(char *dest, const char *src, size_t n);

char * lm_strcat (char *dest, const char *src);

char * lm_strcat2 (char *dest, const char *src);

char * lm_strncat (char *dest, const char *src, size_t n);

char * lm_strncat2 (char *dest, const char *src, size_t n);

int lm_strcmp(const char *s1, const char *s2);

int lm_strncmp(const char *s1, const char *s2, size_t n);

//注:有些函数名字后面有2的表示第二钟方法

size_t lm_strlen(const char *str){

 int len;

 for(len = 0; '/0' != *str++; )

  ++len;

 return len;

}

size_t lm_strlen2(const char *str){

 const char *psz = str;

 while(*psz++)

  ;

 return (psz-str-1);

/* 从src复制源字符串到dest,包括结束符'/0',如果dest数组容量不够,继续覆盖dest数组后面的内存

*/

char * lm_strcpy(char *dest, const char *src){

  //if( (!dest)||(!src) ) return NULL;  //通常为了保持高效不加判断

  char *save = dest;

  while(*dest++ = *src++)

   ;

  return save;

char * lm_strncpy(char *dest, const char *src, size_t n){

  char *start = dest;

  char *end = dest + n;

  while ((start < end) && (*start++ = *src++))

    ;

  return (dest);

char * lm_strncpy2(char *dest, const char *src, size_t n){

  if (n > 0) {

    char *d = dest;

    const char *s = src;

    do {

      if ((*d++ = *s++) == 0){

        //如果n大于字符串src的长度,dest多余部分清0

       while (--n != 0)

         *d++ = 0;

       break;

      }

    } while (--n != 0);

  }

  return dest;

char * lm_strcat (char *dest, const char *src){

  //if( (!dest ) return NULL;

  //if( !src ) return dest;

  lm_strcpy (dest + lm_strlen (dest), src);

char * lm_strcat2 (char *dest, const char *src){

    char *save;

    //if( (!dest ) return NULL;

    //if( !src ) return dest;

    for(save = dest; *dest; dest++ )

    for( ; (*dest = *src); dest++, src++ )

    return save;

char * lm_strncat (char *dest, const char *src, size_t n){

  lm_strncpy (dest + lm_strlen (dest), src, n);

char * lm_strncat2 (char *dest, const char *src, size_t n){

    for( ; (n>0)&&(*dest = *src); dest++, src++, n--)