当前位置:   article > 正文

C语言--strcmp函数,strcat函数,strcpy函数详解及实现

strcmp

目录

1.strcmp函数

1.1函数介绍

1.2函数使用

1.2.1代码

1.2.2运行结果

1.3模拟实现strcmp

1.3.1实现思路

1.3.2代码

 1.3.3运行结果

2.strcat函数

2.1函数介绍

2.2函数使用 

2.2.1代码

2.2.2运行结果

2.3模拟实现strcat

2.3.1实现思路

2.3.2代码

 2.3.3运行结果

3.strcpy函数

3.1函数介绍

3.2函数使用

3.2.1代码 

3.2.2运行结果

3.3函数模拟实现strcpy

3.3.1实现思路

3.3.2代码

 3.3.3运行结果


1.strcmp函数

1.1函数介绍

strcmp函数是用来比较两个字符串大小的函数,需要引用头文件<string.h>。

int strcmp ( const char * str1, const char * str2 );

strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

1.2函数使用

1.2.1代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char* p1 = "abcdefgh";
  6. char* p2 = "abcdefgh";
  7. char* p3 = "abcde";
  8. char* p4 = "bcdef";
  9. printf("%d\n", strcmp(p1, p2));
  10. printf("%d\n", strcmp(p1, p3));
  11. printf("%d\n", strcmp(p3, p4));
  12. }

1.2.2运行结果

1.3模拟实现strcmp

1.3.1实现思路

1.函数所接收的值只用于比较,不能被修改,因此要对参数进行const修饰,由于传入参数都不能为空,因此可以加用断言。

 2. strcmp是比较字符串中对应位置上的字符大小(ASC II码值大小),如果相同,就比较下一对,直到不同或者都遇到'\0'。

3.若str1和str2解引用后不相等,则返回*str1-*str2。

1.3.2代码

  1. #include<stdio.h>
  2. #include<assert.h>
  3. int my_strcmp(const char* str1, const char* str2)
  4. {
  5. assert(str1 && str2);
  6. while (*str1 == *str2)
  7. {
  8. if (*str1 == '\0')
  9. {
  10. return 0;
  11. }
  12. str1++;
  13. str2++;
  14. }
  15. return(*str1 - *str2);
  16. }
  17. int main()
  18. {
  19. char* p1 = "abcdefgh";
  20. char* p2 = "abcdefgh";
  21. char* p3 = "abcc";
  22. char* p4 = "bcde";
  23. printf("%d\n", my_strcmp(p1, p2));
  24. printf("%d\n", my_strcmp(p1, p3));
  25. printf("%d\n", my_strcmp(p3, p4));
  26. }

 1.3.3运行结果

2.strcat函数

2.1函数介绍

strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。

char * strcat ( char * destination, const char * source );

2.2函数使用 

2.2.1代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char str1[20] = "yes or";
  6. const char* str2 = " on";
  7. strcat(str1, str2);
  8. printf("%s\n", str1);
  9. return 0;
  10. }

2.2.2运行结果

2.3模拟实现strcat

2.3.1实现思路

1.目的在字符串dst的末尾接上src的开头。

2.因此首先让dst指向'\0',让src从'\0'开始赋值给dst

2.3.2代码

  1. #include<stdio.h>
  2. void MyStrcat(char* dst, const char* src)
  3. {
  4. while (*dst != '\0')
  5. {
  6. ++dst;
  7. }
  8. while (*dst = *src)
  9. {
  10. ++dst;
  11. ++src;
  12. }
  13. *dst = '\0';
  14. }
  15. int main()
  16. {
  17. char p1[20] = "yes or";
  18. const char* p2 = " no";
  19. MyStrcat(p1, p2);
  20. printf("%s\n", p1);
  21. return 0;
  22. }

 2.3.3运行结果

3.strcpy函数

3.1函数介绍

strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够(destination的空间必须>=source的空间)

char * strcpy ( char * destination, const char * source );

3.2函数使用

3.2.1代码 

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char p1[] = "yes or no";
  6. char* p2 = "yes";
  7. printf("%s\n", p1);
  8. strcpy(p1, p2);
  9. printf("%s\n", p1);
  10. return 0;
  11. }

3.2.2运行结果

3.3函数模拟实现strcpy

3.3.1实现思路

我们目的是将source覆盖拷贝到destination,那么我们可以从头开始将source的值,赋给destination,赋值结束后只需要给destination后一个位置加上'\0'就完成了。

3.3.2代码

  1. #include<stdio.h>
  2. void my_strcpy(char* dst, const char* src)
  3. {
  4. while (*src)
  5. {
  6. *dst = *src;
  7. ++src;
  8. ++dst;
  9. }
  10. *dst = '\0';
  11. }
  12. int main()
  13. {
  14. char p1[] = "yes or no";
  15. const char* p2 = "yes";
  16. printf("%s\n", p1);
  17. my_strcpy(p1, p2);
  18. printf("%s\n", p1);
  19. return 0;
  20. }

 3.3.3运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/388276
推荐阅读
相关标签
  

闽ICP备14008679号