您的位置:首页 > 其它

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区别开来。

如下例子:

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐