目录
1.strcmp函数
(1):strcmp函数的介绍:
strcmp函数主要是用来比较两个字符串的大小的函数,官方来说就是调用来进行计算字符长度后再进行比较的一种函数。
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字;
第一个字符串等于第二个字符串,则返回0;
第一个字符串小于第二个字符串,则返回小于0的数字。
(2):strcmp函数的实现:
2.1:运行代码:
#include<stdio.h>
#include<string.h>
// 主函数
int main()
{
// 定义四个字符指针,分别指向四个字符串常量
char* p1 = "abcdefgh";
char* p2 = "abcdefgh";
char* p3 = "abcde";
char* p4 = "bcdef";
// 输出 p1 和 p2 比较的结果
printf("%d\n", strcmp(p1, p2));
// 输出 p1 和 p3 比较的结果
printf("%d\n", strcmp(p1, p3));
// 输出 p1 和 p4 比较的结果
printf("%d\n", strcmp(p1, p4));
// 主函数返回 0
return 0;
}
2.2:实现思路:
函数接收的值只会用于比较,并不会被修改;因此要对函数进行传参要用const修饰函数;
strcmp是比较字符串中对应位置上的字符大小,如果相同则继续比对下一对;知道遇到'\0'。
2.3:实现的代码样例:
#include<stdio.h>
#include<assert.h>
// 自定义字符串比较函数
int my_strcmp(const char* str1, const char* str2)
{
// 断言确保传入的字符串指针不为空
assert(str1 && str2);
// 逐个字符比较,直到找到不同的字符或到达字符串末尾
while (*str1 == *str2)
{
// 如果当前字符为 '\0',表示两个字符串完全相同,返回 0
if (*str1 == '\0')
{
return 0;
}
// 移动指针到下一个字符
str1++;
str2++;
}
// 返回两个字符串第一个不同字符的 ASCII 码差值
return(*str1 - *str2);
}
int main()
{
char* p1 = "abcdefgh";
char* p2 = "abcdefgh";
char* p3 = "abcc";
char* p4 = "bcde";
// 调用 my_strcmp 函数比较字符串 p1 和 p2,并打印结果
printf("%d\n", my_strcmp(p1, p2));
// 调用 my_strcmp 函数比较字符串 p1 和 p3,并打印结果
printf("%d\n", my_strcmp(p1, p3));
// 调用 my_strcmp 函数比较字符串 p3 和 p4,并打印结果
printf("%d\n", my_strcmp(p3, p4));
}
2.strcat函数
(1)strcat函数的介绍:
strcat作用是追加拷贝,追加指追加到目标空间后面,且要求目标空间足够大,能容纳下源字符串的内容。
char* strcat (char* destination,const char* source);
(2)strcat函数的实现:
2.1:运行代码:
#include<stdio.h>
#include<string.h>
int main()//定义主函数
{
// 定义一个字符数组 p1,长度为 20,并初始化为 "yes or no"
char p1[20] = "yes or no";
// 定义一个指向常量字符的指针 p2,指向字符串 "no"
const char* p2 = "no";
// 调用自定义的字符串拼接函数 Mystrcat,将 p2 拼接到 p1 后面
Mystrcat(p1, p2);
// 打印拼接后的字符串 p1
printf("%s\n", p1);
// 主函数返回 0
return 0;
}
2.2:strcat函数的实现思路:
strcat函数的目的在于让字符串dst的末尾加上src的开头;应该首先让dst指向'\0',让src从'0'开始复制给dst
2.3:strcat函数的实现代码:
#include<stdio.h>
void my_strcpy(char* dst, const char* src)// 定义一个自定义的字符串拷贝函数
{
// 当 src 指向的字符不为空时,执行循环
while (*src)
{
// 将 src 指向的字符拷贝到 dst 指向的位置
*dst = *src;
// src 指针向后移动一位
++src;
// dst 指针向后移动一位
++dst;
}
// 在拷贝结束后,将 dst 指向的字符设置为空字符,以表示字符串的结束
*dst = '\0';
}
int main()
{
// 定义一个字符数组 p1,并初始化为 "yes or no"
char p1[] = "yes or no";
// 定义一个指向常量字符的指针 p2,并初始化为 "yes"
const char* p2 = "yes";
// 打印 p1 的原始值
printf("%s\n", p1);
// 使用 my_strcpy 函数将 p2 指向的字符串拷贝到 p1 中
my_strcpy(p1, p2);
// 打印拷贝后的 p1 的值
printf("%s\n", p1);
// 主函数返回 0
return 0;
}
3.strcpy函数:
(1):strcpy函数的介绍:
strcpy函数意思就是覆盖拷贝,将source全部拷贝到destination,甚至将'\0'也拷过去,且必须考虑destination的空间够不够。
char* strcpy (char* destination, const char* source);
(2)strcpy函数的实现:
2.1:运行代码:
#include<stdio.h>
// 主函数
int main()
{
// 定义一个字符数组 p1 并初始化为 "yes or no"
char p1[] = "yes or no";
// 定义一个指向常量字符的指针 p2,初始化为 "yes"
const char* p2 = "yes";
// 打印 p1 的值
printf("%s\n", p1);
// 调用 my_strcpy 函数,将 p2 指向的字符串复制到 p1 中
my_strcpy(p1, p2);
// 打印 p1 的值,此时 p1 已经被修改为 "yes"
printf("%s\n", p1);
// 主函数返回 0
return 0;
}
2.2:strcpy函数的实现思路:
strcpy函数的目的是将source覆盖拷贝到destination,那我们只要在开始时将source的值赋值给destination就行了,结束后只要在destination的位置上添上'0'就行了。
2.3:函数实现的代码:
#include<stdio.h>
/*
* 函数功能:将源字符串src拼接到目标字符串dst后面
* 参数:dst,目标字符串;src,源字符串
* 返回值:无
*/
void MyStrcat(char*dst,const char*src)
{
// 找到目标字符串的末尾
while (*dst!= '\0')
{
++dst;
// 源字符串指针也向后移动
++src;
}
// 在目标字符串的末尾添加'\0',表示字符串结束
*dst = '\0';
}
int main()
{
// 定义一个字符数组p1,初始值为"yes or no"
char p1[20] = "yes or no";
// 定义一个指向常量字符的指针p2,初始值为"no"
const char* p2 = "no";
// 调用MyStrcat函数,将p2拼接到p1后面
Mystrcat(p1,p2);
// 输出拼接后的字符串
printf("%s\n",p1);
return 0 ;
}

总结:strcmp,strcat和strcpy这三个函数都是C语言中三种重要的函数,涉及地址转换,拷贝,字符串等多个知识点,需要重点掌握。

1万+

被折叠的 条评论
为什么被折叠?



