文章目录
1.strlen函数
1.1 strlen函数的使用
strlen函数可以计算字符串中字符的个数,字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数,不包括‘\0’本身,strlen函数的参数指向的字符必须以‘\0’结束,因为字符个数不会为负数,所以strlen函数的返回值为size_t类型。strlen的头文件为<string.h>。
这里有一串有意思的代码,可以看一下。
#include <stdio.h>
#include <string.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if(strlen(str2)-strlen(str1)>0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
看完这串代码,可能会有人觉得这串代码的结果会是str1>str2,毕竟3-6<0,但是上面说了strlen的返回结果为无符号整型,所以无符号的-3将会是一个大于0且很大的数,这串代码的结果应该是str2>str1。
1.2 strlen函数的模拟实现
strlen函数的模拟实现的方法也有很多种,下面将会列举出三种方式,这里就直接上模拟strlen函数的模拟函数,主函数就不写了。
第一种 计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
因为字符串的结尾是‘\0’,其Ascll码值为0,所以可以将其作为循环的判断标志,在遇到‘\0’之前,每一个字符就会使count增加一次,记录下字符个数,达到模拟实现strlen的效果。
第二种 递归的方式
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
这种方法可以不创建临时变量,直到str指到'\0'的位置,把每个1都加起来,算出字符个数,达到模拟实现strlen的效果。
第三种 指针-指针的方式
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
指针减去指针会得到两个指针之间的(指针变量类型的字节数*相差个数)的字节数,而字符指针类型的字节数为1.所以可以用这种指针-指针的方式来模拟实现strlen的效果。
2.strcpy函数
2.1 strcpy函数的使用
strcpy可以将一个字符串内容拷贝到另一个字符串中,和strlen函数很相似的是以源字符串‘\0’为结束标志,并且‘\0’也会被拷贝进去,需要注意的是目标字符串的空间要足够大,确保能够存下源字符串,目标字符串的空间可以被修改。
2.2 strcpy的模拟实现
#include<stdio.h>
void mystrcmp(char* arr1, const char* arr2)\\目标字符串可以被修改,源字符串不可被修改
{
while (*arr2 != '\0')\\拷贝以源字符串的'\0'为结束标志
{
*arr1 = *arr2;拷贝赋值
arr1++;
arr2++;
}
}
int main()
{
char arr1[10] = "";
char arr2[10] = "abcdef";
mystrcmp(arr1, arr2);
printf("%s", arr1);
return 0;
}
将源字符串的字符都赋值给目标字符串就可以达到strcpy模拟实现的效果。
3.stract函数
3.1stract函数的使用
stract函数可以将一个字符串的内容追加到另一个字符串中,源字符串在目标字符串‘\0’处开始追加,追加过程是以源字符串的'\0'为结束标志,目标字符串的空间要足够大,确保能够追加下源字符串,目标字符串的空间可以被修改。
3.2 stract函数的模拟实现
#include<stdio.h>
void mystract(char* arr1, const char* arr2)\\目标字符串可修改,源字符串不可修改
{
while (*arr1 != '\0')\\源字符串在目标字符串'\0'处开始追加
arr1++;
while (*arr2 != '\0')\\以源字符串'\0'结束追加
{
*arr1 = *arr2;追加赋值
arr1++;
arr2++;
}
}
int main()
{
char arr1[20] = "abcde";
char arr2[20] = "fghij";
mystract(arr1, arr2);
printf("%s", arr1);
return 0;
}
与strcpy函数的模拟实现有很多相似的地方,多了一个追加初始位置。
总结
以上就是strlen,strcpy,strcat的使用及其模拟实现的全部内容了,如果有错欢迎指出,喜欢的话,点赞,收藏,评论,蟹蟹。