@TOC
1、求字符串的长度🚩
1.Sizeof操作符求法
int main()
{
char arr[] = "abcde";
int n = sizeof(arr) / sizeof(arr[0])-1;
printf("%d", n);
return 0;
}
这里运用sizeof操作符所求的是字符串所有的元素,包含尾部的\0,所以我们要在后面减一。
2.strlen库函数
#include<stdio.h>
int main() {
char arr[] = "abcde";
int n = strlen(arr);
printf("%d", n);
return 0;
}
大家可以直接使用strlen库函数,求出来的直接就是字符的个数,注意引入#include<string.h>头文件
3.自定义my_strlen函数
⚠️⚠️⚠️ 在这里参考库函数的参数,给出大家三种实现自定义的方法:
==1.计数器法
2.指针-指针==
==3.递归==
1.计数器法
size_t my_strlen(const char* arr)
{
int count = 0;
while (*arr)
{
arr++;
count++;
}
return count;
}
2.指针-指针
size_t my_strlen(const char* arr)
{
char* src = arr;
while (*src != '/0')
src++;
return src - arr;
}
3.递归
size_t my_strlen(const char* arr)
{
if (*arr == '\0')
return 0;
else return 1 + my_strlen(arr + 1);
}
2、字符串的复制🚩
1.错误示范
int main()
{
char name[20] = { 0 };
name = "zhangsan";
printf("%s", name);
return 0;
}
![
](https://ucc.alicdn.com/images/user-upload-01/22cfa46ecfa24a44be741e13ca4d00c6.png)
⚠️⚠️⚠️ 很明显这个报错了,因为name是一个地址,不能不一组字符赋给地址
2.strcpy库函数
#include<string.h>
int main()
{
char name[20] = {0};
char arr[] = "abcde";
strcpy(name, arr);
printf("%s", name);
return 0;
}
在使用strcpy库函数仍需要注意几个点,数组一定要创建的大一点,不然会存不下复制的数据,造成内存越界,还有就是记得引入头文件
3.自定义my_strcpy函数
char *my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ch = dest;
while (*dest++ = *src++)
;
return ch;
}
int main()
{
char arr[20] = { 0 };
my_strcpy(arr, "woyaojindachang");
printf("%s", arr);
return 0;
}
3、实现字符串连接🚩
1.使用strcat库函数
#include<string.h>
int main()
{
char arr[20] = "hello ";
char arr1[] = "dachang";
strcat(arr, arr1);
printf("%s", arr);
return 0;
}
strcat基本实现就是,目标数组先进行找,找到\0之后,在进行连接,用来源数组第一个元素替换掉\0,以此类推
2.自定义my_strcat函数
char *my_strcat(char* dest, const char* src)
{
char* ch = dest;
assert(dest && src);
while (*dest != '\0')
dest++;
while (*dest++ = *src++)
;
return ch;
}
int main()
{
char arr[] = "hello ";
my_strcat(arr, "dachang");
printf("%s",arr);
return 0;
}
4、判断字符串是否相等🚩
1.错误示范
int main()
{
char arr1[] = "adcd";
char arr2[] = "abcd";
if (arr1 == arr2)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
大家可以思考一下这里为什么,输出的是no,而不是yes,因为在比较两个字符串是否相等时,如果直接用数组名去判断是否相等话,实际实在判断两个数组首地址是否相等,因为arr1和arr2是分别在内存空间中创建的,两个首地址不相等,所以才会输出no。
2.strcmp库函数
#include<stdio.h>
int main()
{
char arr1[] = "adcd";
char arr2[] = "abcd";
if (strcmp(arr1,arr2))
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
:mag_right::mag_right::mag_right: 在这里我们使用了下strcmp库函数,函数的两个参数是两个字符串,返回值分为三类,>0,<0,==0,在使用时,一定要注意引头文件#include<string.h>不然系统会报错。
3.自定义my_strcmp函数
在这里参考一下官方的设计参数
int my_strcmp(const char* dest, const char* src)
{
assert(dest && src);
while (*dest!='/0'&& *src!='\0'&& * dest == *src)
{
dest++;
src++;
}
return (*dest - *src);
}
总结
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/0fe2f8028bd549ff9d907b5a113f2ae7.jpeg#pic_center
)
📐📐📐 这一期的字符串相关函数就到这里了,其中有几个函数可以用好几种方法实现,大家可以自己动手实操一下,这样就能更好的掌握,也希望大家能多多支持。