您的位置:首页 > 其它

strlen/strcmp/strcat/strcpy的实现

2016-05-19 19:12 381 查看

1. strlen

#include <cstddef>

size_t strlen(const char* p)
{
if(p==NULL){
return 0;
}

size_t len=0;
while((*p++)!='\0'){
len++;
}
return len;
}


strlen 与 sizeof 的区别:
sizeof是运算符,strlen是库函数。
sizeof可以用类型、变量做参数,而strlen只能用 char* 变量做参数,且必须以\0结尾。
sizeof是在编译的时候计算类型或变量所占内存的大小,而strlen的结果要在运行的时候才能计算出来,用来计算字符串的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。


2. strcmp

#include <assert.h>

int strcmp(const char *p1,const char *p2)
{
assert(p1!=NULL && p2!=NULL);  //assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
while(*p1==*p2){
p1++;
p2++;
}
if(*p1=='\0' && *p2=='0'){
return 0;
}
return ((unsigned char)*p1<(unsigned char)*p2)?-1:1;
}


3. strcat

#include <assert.h>

char* strcat(char *p1,char *p2)
{
assert(p1!=NULL && p2!=NULL);
char* dest=p1;
while(*dest!='\0'){
dest++:
}
while(*p2!='\0'){
*dest++=*p2++;
}
return p1;
}


4. strcpy

#include <assert.h>

char* strcpy(char *p1,char* p2)
{
assert(p1!=NULL && p2!=NULL);
char* p=p1;
while(*p2!='\0'){
*p++=*p2++;
}
*p='\0';
return p1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: