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