字符串处理源码

来源:互联网 发布:南丹县网络问政平台 编辑:程序博客网 时间:2024/05/21 22:45
strlen:
size_t strlen(const char *str)//声明为const char*str,常量指针(常量的指针)说明指针所指内容不能改变
{
assert(str != NULL);//或者assert(str),同一个意思
const char*eos=str;//这里不是为了说不改变str,而另外设置一个临时变量。而是str我们必须记住他的初始,以便后面return里用
while(* eos++);//'/0'会隐式的转换为0,因为'\0'ascii值为0
return (eos-str-1);
}
strcpy:
char *strcpy(char *d,const char *r)
{
assert(d!=null&&r!=null)//两个指针不能为空,尤其目的指针d,事先必须申请内存,也可以assert(d&&r),因为null是系统常量为0
char *dd=d;//必须使用一个临时指针变量记住指针未移动前初始位置
while(((*dd++)=(*r++))!='\0');//可以直接while((*dd++)=(*r++));因为\0的ascii值为0
return d;
}
strcmp:
int strcmp(const char *s,const char*d)
{
assert(s!=null&&d!=null);
int ret=0;
while(!(ret=*(unsigned char*)s-*(unsignedchar*)d)&&*d)//不用判断*s是否到结尾了,如果到结尾了肯定不想等了,早就结束了。其实两字符串不相等时不会用到&&*d,只有相等时才会从&&*d结束。
++s,++d;
       if (ret< 0 )
              ret=-1 ;
       else if (ret> 0 )
              ret=1 ;
       return(ret);
}

strcat:

char* strcat(char *d,const char *s)
{
assert(d&&s);
char *dd=d;
while(*(++dd));//结束时*dd='\0'
while(*dd++=*s++);
return d;
}

原创粉丝点击