strlen,strcpy,strncpy,strcmp,strcat,strstr的用法,函数原型及函数的实现
2017-06-16 11:13
656 查看
1.strlen
用法:用来计算字符串(unsigned int型)的长度。
函数原型:extern int strlen(const char*str)。
函数实现:
int my_strlen(const char*str)
{
int len=0;
assert(str);
if(str==NULL)
{
return -1;
}
while((*str++)!='\0')
{
len++;
}
return len;
}
注意:strlen求的是字符串实际长度,只跟内容有关,不包括‘\0’,要和sizeof区别开来。
如下例子:
2.strcpy
用法:用来对字符串进行拷贝。
函数原型:char*strcpy(char*dst,const char*src)函数实现:
一般写法(没有考虑内存重叠问题)如下:
char*my_strcpy(char*dst,const char*src)
{
assert(dst);
assert(src);
char *ret=dst;
while((*dst++=*src++)!='\0')
{
;
}
return ret;
}
正确写法:
char* my_strcpy(char*dst,const char*src)
{
char*ret=NULL;
ret=dst;
assert(dst);
assert(src);
my_memcpy(dst,src,strlen(src)+1);
return ret;
}
memcpy的函数实现:
char* my_memcpy(char*dst,const char*src,int len)
{
char*ret=dst;
assert(dst);
assert(src);
if(dst>=src&&dst<=src+len-1)
{
dst=dst+len-1;
src=src+len-1;
while(len--)
{
*dst++=*src++;
}
}
else
{
while(len--)
{
*dst++=*src++;
}
}
return ret;
}
3.strncpy
用法:用来把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dst。
函数原型:char*strncpy(char*dst,char*src,int n)
函数实现:char*my_strncpy(char* dst,char* src,int n)
{
assert(dst);
assert(src);
int p1=strlen(dst);
int p2=strlen(src);
char* ret=dst;
if(p1>=p2)
{
memset(dst,0,p1);
while(n--&&(*src!='\0'))
{
*dst++=*src++;
}
return ret;
}
if(p1<p2)
{
while(*dst!='\0'&&n--)
{
*dst++=*src++;
}
*(dst+p1)=NULL;
return ret;
}
}
4.strcmp
用法:用来比较两个字符串的大小,比较的是两者第一个不相同的字符,26个字母前面的比后面的小,小写字母比大写字母大,当字符1>字符2时,strcmp()>0;当字符1<字符2时,strcmp()<0;当字符1=字符2时,strcmp()=1.
函数原型:int strcmp(const char*dst,const char*src)
函数实现:
int my_strcmp(const char*dst,const char*src)
{
assert(dst);
assert(src);
while(*dst++==*src++&&dst!='\0')
{
;
}
return *dst-*src;
}
4.strcat
用法;连接两个字符串的
函数原型:char*strcat(char*dst,char*src)
{
assert(dst);
assert(src);
char*ret=dst;
while(*dst!='\0')
{
dst++;
}
while(*src!='\0')
{
*dst++=*src++;
}
*dst='\0';
return ret;
}
5.strstr
用法:用来搜索子串在字符串第一次出现的位置。
函数原型:char*strstr(char*dst,char*src);
函数实现:
char* my_strstr(char*dst,char* src)
{
assert(dst);
assert(src);
while((*dst++)!='\0')
{
char* ret1=dst;
char* ret2=src;
while(*dst==*src)
{
dst++;
src++;
if(*src=='\0')
{
return ret1;
}
}
dst=ret1++;
}
return NULL;
}
用法:用来计算字符串(unsigned int型)的长度。
函数原型:extern int strlen(const char*str)。
函数实现:
int my_strlen(const char*str)
{
int len=0;
assert(str);
if(str==NULL)
{
return -1;
}
while((*str++)!='\0')
{
len++;
}
return len;
}
注意:strlen求的是字符串实际长度,只跟内容有关,不包括‘\0’,要和sizeof区别开来。
如下例子:
char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20;
2.strcpy
用法:用来对字符串进行拷贝。
函数原型:char*strcpy(char*dst,const char*src)函数实现:
一般写法(没有考虑内存重叠问题)如下:
char*my_strcpy(char*dst,const char*src)
{
assert(dst);
assert(src);
char *ret=dst;
while((*dst++=*src++)!='\0')
{
;
}
return ret;
}
正确写法:
char* my_strcpy(char*dst,const char*src)
{
char*ret=NULL;
ret=dst;
assert(dst);
assert(src);
my_memcpy(dst,src,strlen(src)+1);
return ret;
}
memcpy的函数实现:
char* my_memcpy(char*dst,const char*src,int len)
{
char*ret=dst;
assert(dst);
assert(src);
if(dst>=src&&dst<=src+len-1)
{
dst=dst+len-1;
src=src+len-1;
while(len--)
{
*dst++=*src++;
}
}
else
{
while(len--)
{
*dst++=*src++;
}
}
return ret;
}
3.strncpy
用法:用来把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dst。
函数原型:char*strncpy(char*dst,char*src,int n)
函数实现:char*my_strncpy(char* dst,char* src,int n)
{
assert(dst);
assert(src);
int p1=strlen(dst);
int p2=strlen(src);
char* ret=dst;
if(p1>=p2)
{
memset(dst,0,p1);
while(n--&&(*src!='\0'))
{
*dst++=*src++;
}
return ret;
}
if(p1<p2)
{
while(*dst!='\0'&&n--)
{
*dst++=*src++;
}
*(dst+p1)=NULL;
return ret;
}
}
4.strcmp
用法:用来比较两个字符串的大小,比较的是两者第一个不相同的字符,26个字母前面的比后面的小,小写字母比大写字母大,当字符1>字符2时,strcmp()>0;当字符1<字符2时,strcmp()<0;当字符1=字符2时,strcmp()=1.
函数原型:int strcmp(const char*dst,const char*src)
函数实现:
int my_strcmp(const char*dst,const char*src)
{
assert(dst);
assert(src);
while(*dst++==*src++&&dst!='\0')
{
;
}
return *dst-*src;
}
4.strcat
用法;连接两个字符串的
函数原型:char*strcat(char*dst,char*src)
{
assert(dst);
assert(src);
char*ret=dst;
while(*dst!='\0')
{
dst++;
}
while(*src!='\0')
{
*dst++=*src++;
}
*dst='\0';
return ret;
}
5.strstr
用法:用来搜索子串在字符串第一次出现的位置。
函数原型:char*strstr(char*dst,char*src);
函数实现:
char* my_strstr(char*dst,char* src)
{
assert(dst);
assert(src);
while((*dst++)!='\0')
{
char* ret1=dst;
char* ret2=src;
while(*dst==*src)
{
dst++;
src++;
if(*src=='\0')
{
return ret1;
}
}
dst=ret1++;
}
return NULL;
}
相关文章推荐
- 模拟实现strcmp,strncmp,strstr,strcat,strncat,strcpy,strncpy,strlen ,memcpy,memmove等函数
- strlen strcmp strcat strcpy strncpy strstr strchar函数的实现
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- 自定义实现字符串处理函数 strlen strcmp strcpy strncpy strcat strncat strchr strstr
- strlen(),strcpy(),strncpy(),strcat(),strncat(),strcmp(),strncmp()等函数的实现
- c语言:strcpy、strncpy、 Strcat、 Strcmp 、strchr、 strstr、 Strlen等函数功能
- strlen,strcpy,strcat,strcmp四个函数的原型,memcpy,memset的实现
- 和字符串有关的函数的模拟实现 strlen strcpy strcat strstr strcmp
- strcpy strlen memcpy strcat strcmp strstr strrev函数的实现代码
- c语言:strcpy、strncpy、 Strcat、 Strcmp 、strchr、 strstr、 Strlen等函数功能
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 字符串处理函数的模拟实现(strlen、strstr、strcat、strcmp、strcpy、memmove、memcpy)
- 字符串操作函数Strcat、Strcpy、Strcmp、Strlen原型
- C语言字符串函数详解 strcpy、strcmp、strcat、strlen、strstr
- strcat,strcpy,strcmp,strlen4个常用字符串处理函数的数组与指针简单实现方法~
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- 自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- strcpy,strcat,strcmp,strstr 实现函数
- 纯C 字符串操作函数 实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )