一、strlen
strlen函数用法:参数只有一个,传入指向字符串首地址的指针,返回该字符串长度(第一个字符到’\0’的长度)
注意事项:注意与sizeof(str)的区别,sizeof求大小,包括’\0’,strlen求长度,不包括’\0’。
//size_t strlen ( const char * str );标准库函数声明
sizt_t My_strlen(const char *str) {//模拟实现
if (str == NULL) { //判断字符串是否为空
return 0;
}
size_t lenth = 0;
while (*str) { //字符串内容不为空('\0')长度加一,指针指向下一个字符
lenth++;
str++;
}
return lenth; //返回字符串长度
}
二、strcat
strcat用法:两个参数,第一个为目标字符串,第二个为需要拼接的字符串,将需要拼接的字符串拼接至目标字符串的后面,包括’\0’(目标字符串’\0’会被覆盖)
注意事项:使用时注意拼接字符串的大小,为目标字符串留够足够的位置。
//char * strcat ( char * destination, const char * source );
//标准库函数声明
char * My_strcat(char *des, const char *src)//模拟实现
{
if (des == NULL || src == NULL) {//字符串判空
return des;
}
char *p = des;
while (*p) {//找到目标字符串的末尾
p++;
}
while (*src) {//将需要拼接的字符串拼接至目标字符串
*p++ = *src++;
}
*p = *src;//将'\0'拼接至字符串末尾
return des;//返回目标字符串首地址
}
三、strcpy
strcpy用法:两个参数,第一个为目标字符串,第二个为需要拷贝的字符串,将需要拷贝的字符串拷贝到目标字符串,包括’\0’(完全覆盖目标字符串)
注意事项:使用时注意要拷贝字符串的大小,为目标字符串留够足够的位置。
//char * strcpy ( char * destination, const char * source );
//标准库函数声明
char * My_strcpy(char *des, const char *src) {//模拟实现
if (des == NULL || src == NULL) {//字符串判空
return des;
}
char *p = des;
while (*src) {//将需要拷贝的字符串拷贝到目标字符串
*p++ = *src++;
}
*p = *src;//将'\0'拷贝到字符串末尾
return des;//返回目标字符串首地址
}
四、strcmp
strcmp用法:两个参数,比较字符串大小,每一个字符进行比较ASCII值,字符都相等则比较长度(其实还是比较ASCII,短的那个字符串末尾为’\0’,ASCII为0,与另一个字符串相对应的字符相比,只要那个字符不是’\0’,就是该字符大);第一个字符串大返回1,相等返回0,第二个字符串大返回-1
注意事项:注意返回值,相等为0
//int strcmp ( const char * str1, const char * str2 );
//标准库函数声明
int My_strcmp(char *p1, char *p2)//模拟实现
{
assert(p1 != NULL);
assert(p2 != NULL);//字符串判空
int ret = 0;
while (*p1 && *p2 && !ret) {//每一个字符比较,若一样则比较下一个
ret = *p1 - *p2;
p1++;
p2++;
}
if (ret == 0) { //ret == 0说明至少一个字符串已经遍历结束
ret = *p1 - *p2;//结束的字符串的1‘\0’与另一个字符串比较
}
if (ret > 0) {//整理返回值(1,0,-1)
return 1;
}
else if (ret == 0){
return 0;
}
return -1;
}