1. 程式人生 > >C語言——字串函式

C語言——字串函式

C語言——字串函式

宗旨:技術的學習是有限的,分享的精神是無限的。

常用字串操作函式的實現:註釋部分你們注意一下,我沒加/,加了/就看不到註釋了。

*************************************************

*功能:實現字串的拷貝

*引數:

        dest:把src拷貝到dest

        src:被拷貝的字串

*返回值:返回其首地址

**************************************************

char*strcpy(char *dest, const char *src)

{

       assert((NULL != dest)&& (NULL != src));

        char *temp = dest;

        while((*dest++ = *src++) !='\0');

        return temp;

}

*************************************************

*功能:從src中拷貝count位元組大小到dest中

*引數:

        dest:把src拷貝到dest

        src:被拷貝的字串

        count:拷貝的位元組數大小

*返回值:返回其首地址

**************************************************

char*strncpy(char *dest, const char *src, size_t count)

{

       assert((NULL != dest) && (NULL !=src));

        char *temp = dest;

       while(count)

       {

            if((*dest = *src) != '\0')

          {

                   src++;

              }

            dest++;

            count--;

       }

       return temp;

}

*************************************************

*功能:從src中拷貝size位元組大小到dest中

*引數:

        dest:把src拷貝到dest

        src:被拷貝的字串

        size:拷貝的位元組數大小

*返回值:返回源字串大小

**************************************************

char*strlcpy(char *dest, const char *src, size_t size)

{

       assert((NULL != dest)&& (NULL != src));

       size_t ret = strlen(src);

       if(size)

       {

               size_t length = (ret >=size) ? (size - 1) : ret;

              memcpy(dest, src, length);

              dest[length] = '\0';

       }

       return ret;

}

*************************************************

*功能:將字串src連線到dest的尾部

*引數:

        dest:

        src:連線到dest的字串

*返回值:返回dest的首地址

**************************************************

char*strcat(char *dest, const char *src)

{

        assert((NULL != dest) &&(NULL != src));

       char *temp = dest;

        while(*dest++);

       while((*dest++ = src++) != '\0');

       return temp;

}

*************************************************

*功能:將字串src連線count位元組到dest的尾部

*引數:

        dest:

        src:連線到dest的字串

        count:連線的位元組數大小

*返回值:返回dest的首地址

**************************************************

char*strcat(char *dest, const char *src, size_t count)

{

       assert((NULL != dest) && (NULL !=src));

       char *temp = dest;

       if(count)

       {

              while(*dest++);

              while((*dest++ = src++) != '\0')

               {

                     if(--count == 0)

                     {

                                    *dest = '\0';

                                   break;

                      }

               }

        }

       return temp;

}

*************************************************

*功能:字串比較

*引數:

        dest:

        src:

*返回值:

        如果dest> src,則返回值大於0,

        如果dest= src,則返回值等於0,

        如果dest< src,則返回值小於0。

**************************************************

intstrcmp(const char *dest, const char *src)

{

       assert((NULL != dest) && (NULL !=src));

       while (*dest &&*src && (*dest == *src))

       {

               dest ++;

              src ++;

       }

       return (*dest - *src);

}

/*************************************************

*功能:比較兩個字串前count個字元是否一樣

*引數:

        dest:

        src:

*返回值:

        如果dest> src,則返回值大於0,

        如果dest= src,則返回值等於0,

        如果dest< src,則返回值小於0。

**************************************************

intstrncmp(const char *dest, const char *src, size_t count)

{

      assert((NULL != dest) &&(NULL != src));

      while(count)

      {

              if(*dest && *src &&(*dest == *src))

              {

                  dest ++;

     src ++;

                  count--;

              }

       }

       return (*dest - *src);

}

*************************************************

*功能:查詢字串中C第一次出現的位置

*引數:

*      src:

*      c  :待查詢的字元

*返回值: 返回第一次出現的指標

**************************************************

char*strchr(const char *src, int c)

{

       assert(NULL != src);

       for(; *s != (char)c; s++)

       {

              if(*s == '\0')

              {

                     return NULL;

              }

       }

       return (char *)s;

}

*************************************************

*功能:計算字串的大小

*引數:

*      src:

*返回值: 字串的大小

**************************************************

size_tstrlen(const char *src)

{

       assert(NULL != src);

       const char *temp;

       for(temp = src; *temp != '\0'; src++);

       return (temp - src);

}

*************************************************

*功能:將字串src的前count位元組置為c

*引數:

*      src:

*      c  :置數值

*      count:置多少位元組

*返回值: 字串首地址

**************************************************

void*memset(void *src, int c, size_t count)

{

       assert(NULL != src);

       char *temp = src;

       while(count--)

       {

              *temp++ = c;

       }

 return src;

}

*************************************************

*功能:比strcpy強大,不僅限於字串的拷貝

*引數:

*      dest:

*      src :置數值

*      count:拷貝位元組數

*返回值: 字串首地址

**************************************************

void*memcpy(void *dest, const void *src, size_t count)

{

       assert((NULL != dest) && (NULL !=src));

       char *temp = dest;

       const char *s = src;

       while(count--)

       {

              *temp++ = *s++;

       }

       return dest;

}

intmemcmp(const void *cs, const void *ct, size_t count)

{

       assert((NULL != dest) && (NULL !=src));

       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;

}