字符串的四大函数
原型
size_t strlen(const char *str);
char *strcat(char *Dest,const char *Src);
char *strcpy(const char *s1,const char *s2);
int *strcmp(const char *s1,const char *s2);
声明:
1、判断参数的合法性
2、保护参数,当参数为const 类型时,可以不同保护参数
3、注意赋值之后’\0’位置
实现
//my_strlen
size_t my_strlen(const char *str)
{
assert( str != NULL);
const char *tmp = str;
int count =0;
while(*tmp++ != '\0')
{
count++;
//tmp++;
}
return conut;
}
//递归
size_t my_strlen(const char *str)
{
assert( str !=NULL );
const char *tmp = str;
if(*tmp == '\0')
return 0;
else
return my_strlen(tmp+1)+1;
}
//my_strcat
char *my_strcat(char *Dest,const char *Src)
{
assert(Dest != NULL && Src != NULL);
char *tmpD = Dest;
const char *tmpS = Src;
while(*tmpD != '\0')
{
tmpD++;
}
while(*tmpS != '\0')
{
*tmpD++ = *tmpS++;
//tmpD++;
//tmpS++;
}
*tmpD ='\0';
return Dest;
}
//将s2字符串(以‘\0’结束)复制到s1中
//my_strcpy
char *my_strcpy(const char *s1,const char *str2)
{
assert(s1 != NULL && s2=NULL);
const char *tmpD = S1;
const char *tmpS = S2;
while(*tmpD != '\0')
{
*tmpD++ = *tmpS++;
}
*tmpD = '\0';
return s1;
}
//my_strcmp
//两者长度一样时比较先比较;然后判断哪个长
s1="Hello C++"和s2="Hello" 先比较Hello s1>s2
int my_strcmp(const char *s1,const char *s2)
{
while(*s1 ='\0' && s2 != '\0')
{
if(*s1 > *s2)
{
return 1;
}
else if(*s1 <*s2)
{
return -1;
}
s1++;
s2++;
}
// hello helloc
if(*s1 != '\0' && *s2 == '\0')
{
return 1;
}
else if(*s1 == '\0' && *s2 != NULL)
{
return -1;
}
return 0;
}
//做减法,只要有一个不为‘\0’,‘\0’与llo比较 "hello" "he"
int my_strcmp(const char *s1,const char *s2)
{
assert(s1 != NULL && s2 != NULL );
const char *tmpD = s1;
const char *tmpS = s2;
int val = 0;
while(*tmpD != '\0' ||*tmpS != NULL)
{
val = *tmpD - *tmpS;
if(val != 0)
break;
tmpD++;
tmpS++;
}
if(val > 0)
{
val = 1;
}
else if(val < 0)
{
val = -1;
}
return val;
}