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;
}
标准写法
#include "assert.h"
char* strcpy(char *dest,const char *src)
{
assert((dest!=NULL) && (src!=NULL));
char *ret=dest;
while((*dest++=*src++)!='\0');
return ret;
}