文章目录
一、 strcpy
1.strcpy函数
头文件 <string.h>
原型
char* strcpy(char * destination, const char* source
**// destination 指向用于存储复制内容的目标数组。
// source 需要拷贝的字符串
//该函数返回一个指向最终的目标字符串 destination 的指针。**
注意事项
- 源字符串必须以 ‘\0’ 结束。
- 会将源字符串中的 ‘\0’ 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。
4.目标空间必须可变。
2.strcpy 的使用
#include<stdio.h>
#include<string.h>// 头文件
int main()
{
char arr1[20] = "0";
char arr2[10] = "abcdef";
int i = 0;
printf("交换前\n");
printf("%s\n", arr1);
printf("交换后\n");
strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
3.strcpy 的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* arr1, const char* arr2)
{
char* ret = arr1;
//记录 arr1 首地址
// 方便返回
assert(arr1 && arr2);
// 断言 放置 arr1 和 arr2 为空指针
//使用需要引头文件
//<assert.h>
while ((*arr1 = *arr2))//当*arr2 为'\0'并放进arr1 是 此时 为假 跳出循环
{
arr1++;
arr2++;
}
return ret;
}
int main()
{
char arr1[20]="0";
char arr2[10] = "abcdef";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
4.strncpy
1.描述
C 库函数 char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
2.strncpy 的使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20];
char arr2[19];
strcpy(arr1, "Hello ");
strcpy(arr2, "world");
printf("%s\n", arr1);
printf("%s\n", arr2);
strncpy(arr1, arr2, 5);
printf("%s\n", arr1);
// 此外打印 字符数组其实还可以这样写
printf(arr1);
// 一样能打印,为啥呢
// 字符数组 都是 重第一个元素的地址往后
// printf 从第一个元素地址 往后打印
}
二、strcat
1.strcat函数
头文件 <string.h>
2.描述
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
2.strcat 函数的使用
#include<stdio.h>
#include<string.h>
// 头文件
int main()
{
// 如果 写成
// char arr1[10] = "Hellow "
// 6个元素加上追加的 world 5个元素 会发生越界访问报错
char arr1[20] = "Hello ";
char arr2[10] = "world";
strcat(arr1, arr2);
printf("%s", arr1);
return 0;
}
3.strcat 的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* arr1,const char* arr2)
{
char* ret = arr1;
assert(arr1 && arr2);
while (*arr1)
{
arr1++;
}
while (*arr1 = *arr2)
{
arr1++;
arr2++;
}
return ret;
}
int main()
{
char arr1[20] = "Hello ";
char arr2[10] = "world";
my_strcat(arr1, arr2);
printf("%s", arr1);
}
4.strncat
1.描述
char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
src -- 要追加的字符串。
n -- 要追加的最大字符数。
2.strncat 的使用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char arr1[20];
char arr2[19];
strcpy(arr1, "Hello ");
strcpy(arr2, "world");
strncat(arr1, arr2, 5);
printf(arr1);
}
三、strcmp
1.strcmp函数
头文件 <string.h>`
2.描述
C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较
str1 进行比较的第一个字符串
str2 进行比较的第二个字符串
比较方式
strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不到的字符,或者到达字符串末尾(遇见\0)。
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
2.strcmp 函数的使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[10] = "abcdef";
//c 的 ASCII 值为 99
char arr2[10] = "abgdef";
//g 的 ASCII 值为 103 所以 arr2 > arr1
int ret = strcmp(arr1, arr2);
if (ret > 0)
{
printf("arr1 > arr2");
}
else if (ret == 0)
{
printf("arr1 == arr2 ");
}
else
{
printf("arr1 < arr2");
}
return 0;
}
3.strcmp 函数的模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strcmp(const char* arr1, const char* arr2)
{
int ret = 0;
assert(arr1 && arr2);
// 强制类型转化 让 arr1 减 arr2 如果 等于 0 说明 此时对应
//的字符相等 arr1++ ,arr2++ 比较第二个字符
// ! 运算符 让原本 为 0(为零) 变为 非零 满足循环条件
while (!(ret = *(unsigned char*)arr1 - *(unsigned char*)arr2) && *arr2)
{
arr1++;
arr2++;
}
if (ret > 0)
{
return 1;
}
else if (ret < 0)
{
return -1;
}
return ret;
// 此时 两个字符串 相等 跳出循环的条件就为 arr2 找到了'\0 '
//ret 还是 一开始赋值的 0
}
int main()
{
char arr1[10] = "abcdef";
//c 的 ASCII 值为 99
char arr2[10] = "abgdef";
//g 的 ASCII 值为 103 所以 arr2 > arr1
int ret = my_strcmp(arr1, arr2);
if (ret > 0)
{
printf("arr1 > arr2");
}
else if (ret == 0)
{
printf("arr1 == arr2 ");
}
else
{
printf("arr1 < arr2");
}
return 0;
}
4.strncmp
1.描述
int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字节
str1 -- 要进行比较的第一个字符串。
str2 -- 要进行比较的第二个字符串。
n -- 要比较的最大字符数。
2.strncmp 的使用
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[10] = "abcdef";
char arr2[10] = "abcgef";
//int ret = strncmp(arr1, arr2, 3);
//此时比较的是 前3 个字符 abc 相等
int ret = strncmp(arr1, arr2, 5);
//此时比较的是 前5 个字符 g的ASCII值大于d
// arr2 > arr1
if (ret > 0)
{
printf("arr1 > arr2");
}
else if (ret == 0)
{
printf("arr1 == arr2 ");
}
else
{
printf("arr1 < arr2");
}
return 0;
}
四、strlen
-
1.前面已经完成过 就不在 继续补充有需要可以看
- 三种方式实现strlen.