char *strcp y(cha r *s1,cons t cha r *s2);//该函数把s2指向的字符串复制到s1指向的位置,返回值是s1
c har *strnc py(ch ar *s1,con st ch ar *s2,siz e_t n);//该函数把s2指向的字符串复制到s1的位置,最多复制n个,返回值是s1
char*strc at(ch ar *s1,con st ch ar *s2);//s2指向的字符串被复制到s1的结尾,返回值是s1.
char *str ncat(char*s1,c onstchar*s2,s ize_t n);//复制过来的s2字符串的第一个字符覆盖了s1字符串结尾的空字符。s2字符串的空字符及其后的任何字符都不会被复制,并且追加一个空字符到结果的后面,返回值是s1.
intstrcm p(con st ch ar *s1,con st ch ar *s2);
i nt st rncmp(cons t cha r *s1,cons t cha r *s2);
c har *strch r(con st ch ar *s,intc);//该函数返回一个指向字符串s中的存放c的第一个位置的指针,如果没有到该字符,返回空指针。
char *str pbrk(const char *s,i ntc);//该函数返回一个指针,指向字符串s1中存放s2字符串中的任何字符的第一个位置。如果没有到任何字符,则返回空指针。
char*strr chr(c onstchar*s,in t c);//返回值指向字符串s中字符c最后出现的位置。
char*strs tr(co nst c har *s1,co nst c har *s2);//该函数返回一个指针,指向s1字符串中第一次出现s2的位置。
siz e_t s trlen(cons t cha r *s);
ch ar *s trcpy(char *s1,const char *s2);
1、S trcat函数原型如下:
ch ar *s trcat(char *str Dest, cons t cha r *st rScr) //将源字符串加c onst,表明其为输入参数
{
ch ar *addre ss =strDe st; //该语句若放在a ssert之后,编译出错
asser t((st rDest != N ULL)&& (s trScr != N ULL)); //对源地址和目的地址加非0断言
whil e(*st rDest) //是whi le(*s trDes t!=’/0’)的简化形式
{ //若使用whil e(*st rDest++),则会出错,因为++是不受循环
st rDest++; //约束的。所以要在循环体内++;因为要是*strDe st最后指
} //向该字符串的结束标志’/0’。
wh ile(*strDe st++= *st rScr++)
{
NUL L; //该循环条件内可以用++,
} //此处可以加语句*st rDest=’/0’;有无必要?
ret urn a ddres s; //为了实现链式操作,将目的地址返回
}
1、附件
#incl ude<a ssert.h>
char*strn cat(c har *dst,c har c onst*src,unsig ned i nt co unt)
{
ch ar *a ddres s=dst;
as sert( (dst!=NUL L)&&(src!=NULL) );
whil e(*ds t!='\0')
dst++;
w hile(count-- && *dst!='\0')
*dst++=*sr c++;
*dst='\0';
re turnaddre ss;
}
2、Strcp y函数原型如下:
c har *strcp y(cha r *st rDest, con st ch ar *s trScr)
{
char *add ress=strDe st;
asse rt((s trDes t !=NULL) && (strSc r !=NULL));
while(*str Scr) //是whil e(*st rScr!= ’/0’)的简化形式;
{
*s trDes t++ = *str Scr++;
}
*s trDes t = '\0'; //当strSc r字符串长度小于原s trDes t字符串长度
r eturn addr ess; //时,如果没有改语句,就会出错了。
}
st rcpy()返回的是字符的地址。其次,第一个参数不需要指向数组的开始,这样就可以只复制数组的一部分。另外,其与gets()函数一样,不检查目标字符是否容纳的下源字符串。
2、附件
//s trncp y()如果src指向的字符个数少于cou nt,则用'\0'补齐
#in clude<stdd ef.h>//为了使用size_t
#i nclud e<ass ert.h>
cha r *st rncpy(char *dst,cons t *sr c,siz e_t c ount)
{
a ssert( (ds t!=NU LL)&&(src!=NULL) );
char *add ress=dst;
whi le(co unt--)
{
if(*src!='\0')
{
*dst++=*src++;
}
else
{
*ds t++='\0';
}
}
re turnaddre ss;
}
3、Strcm p函数原型如下:
i nt st rcmp(cons t cha r *st r1,co nst c har *str2)
{
intlen = 0;
asse rt((s tr1 != '/0') && (str2 !='/0'));
while(*str1 &&*str2 && (*str1 == *str2))
{
str1++;
str2++;
}
retu rn *s tr1-*str2;
}
3附件//字符串比较,不区分大小写比较,大写字母会被映射wi e小写字母intstric mp(co nst c har *dst,c onstchar*src)
{
a ssert(dst!=NULL && s rc!=N ULL);
int ch1,ch2;
whil e(*ds t &&*src)
{
if((ch1=(int)*dst)<='A' && (ch2<='Z'))
c h1+=0x20;
if( (ch2=(int)*src)>='A' &&(ch2<='Z'))
ch2+=0x20;
if(ch1==ch2)
{
ds t++;
sr c++;
}
else brea k;
}
ret urn (ch1-c h2);
}
i nt st rncmp(cons t cha r *s, cons t cha r *t, unsi gnedint c ount){
as sert((s != NULL) &&(t != NULL));
whil e (*s && *t &&*s == *t && cou nt --)
{
++s;
++ t;
}
retu rn(*s - *t);
}
4、Str len函数原型如下:
intstrle n(con st ch ar *s tr)
{
int l en =0;
asser t(str != N ULL);
wh ile(*str++)
{
len++;
}
re turnlen;
}
si ze_t__cde cl st rlen(const char *src)
{
字符串函数源码const char *eos=str;
whi le(*e os++);
r eturn ((in t)(eo s-str-1));
}
同时应注意s trcat---st rncat
strc mp---strnc mp
st rcpy---str cpy
5》st rchr//函数返回一个指向s tr中c的首次出现的位置,没有到返回N ULL
char*strc hr_(c har *str,c har c)
{
if(NU LL==s tr)
retu rn(ch ar*)N ULL;
whi le(*s tr &&*str!=c)
str++;
i f(*st r==c)
r eturn str;//该局与if相匹配
ret urn(c har *)NULL;//该句与else向匹配
}
6》strch ri//函数返回一个指向str中c的首次出现的位置,没有到返回-1intstrch ri_(c onst)
7》mems et();把指定内存区域的前c ount个字节设置成字符c
#inclu de<as sert.h>
#i nclud e<std def.h>
voi d *me mset(void*buff er,in t c,s ize_t coun t)
{
asse rt(bu ffer!=NULL);
c har *p=(ch ar *)buffe r;
while(coun t--)
*p++=(ch ar)c;
ret urn b uffer;
}
8》
//查字符串第一次出现的位置
char*strs tr(co nst c har *strsr c,con st ch ar *s tr)
{
ass ert((strs rc!=N ULL)&&(str!=NUL L) );
con st ch ar *s=strs rc;
const char *t=s tr;
for(; *st rsrc!='\0'; __s trsrc)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论