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;
}