当前位置:   article > 正文

【C语言】关于字符串函数的使用及模拟实现(2)

【C语言】关于字符串函数的使用及模拟实现(2)

一、字符串的复制

1.1 库函数strcpy的使用

在函数strcpy中,函数的返回类型为char* ,参数部分首先是指向目标地址的指针,其次是指向源地址的指针(由于源地址中内容不受影响,则可以使用const修饰),函数所需的头文件为string.h

6419a0dc136b467bad5b4e516e5f3068.png

1dbbff94c25e4708bdc079544a8f0bdd.png

 

1.2 库函数strncpy的使用

strncpy函数在strcpy函数基础上加入了一个参数,表示复制到目标地址去的个数

e894fff37cf743d0976a1318cae70a29.png

98288e4fa23c4e6aab34ea9e8ad8dd67.png

 

1.3 模拟实现strcpy及strncpy

模拟实现库函数strcpy

  1. #include<stdio.h>
  2. char* my_strcpy(char* b,const char* a){
  3. char* tmp = b;
  4. while(*a){
  5. *b = *a;
  6. a++;
  7. b++;
  8. }
  9. return tmp;
  10. }
  11. int main(){
  12. char a[20] = "abcd";
  13. char b[20];
  14. char c[20];
  15. printf("b[] = %s\n",my_strcpy(b,a));
  16. printf("c[] = %s\n",my_strcpy(c,"dsda"));
  17. return 0;
  18. }

模拟实现库函数strncpy

  1. #include<stdio.h>
  2. char* my_strncpy(char* b,const char* a,int c){
  3. int count = 0;
  4. char* tmp = b;
  5. while(count < c){ //for(int count=0;count<c;a++,b++,count++){
  6. *b = *a; // *b = *a;
  7. a++; // }
  8. b++;
  9. count++;
  10. }
  11. return tmp;
  12. }
  13. int main(){
  14. char a[20] = "abcd";
  15. char b[20];
  16. char c[20];
  17. printf("b[] = %s\n",my_strncpy(b,a,3));
  18. printf("c[] = %s\n",my_strncpy(c,"sdas",2));
  19. return 0;
  20. }

二、字符串的比较

2.1 库函数strcmp的使用

函数的返回类型为int,所需的头文件为string.h

218efc6f558f4d1584df85099ca6ac09.png

 比较规则:

13713ba9602846269e29710266e1e0fd.png

 437532010ff649ee8d08bf27df85c1c5.png

2.2 库函数strncmp的使用

7debd498ab6b45ca8fc990ead443194b.png

 6baeeeef38e648a4951a8b0aaffdfbc8.png

2.3 模拟实现strcmp及strncmp

模拟实现库函数strcmp

  1. #include<stdio.h>
  2. int my_strcmp(const char* a,const char* b){
  3. while(*a || *b){
  4. if(*a > *b){
  5. return 1;
  6. }else if(*a < *b){
  7. return -1;
  8. }
  9. a++;
  10. b++;
  11. }
  12. return 0;
  13. }
  14. int main(){
  15. char a[20] = "abcd";
  16. char b[20] = "abdd";
  17. int tmp = my_strcmp(a,b);
  18. printf("%d\n",tmp);
  19. tmp = my_strcmp(b,a);
  20. printf("%d\n",tmp);
  21. tmp = my_strcmp(a,a);
  22. printf("%d\n",tmp);
  23. return 0;
  24. }

模拟实现库函数strncmp

  1. #include<stdio.h>
  2. int my_strncmp(const char* a,const char* b,int c){
  3. int count = 0;
  4. while((*a || *b) && count < c){
  5. if(*a > *b){
  6. return 1;
  7. }else if(*a < *b){
  8. return -1;
  9. }
  10. a++;
  11. b++;
  12. count++;
  13. }
  14. return 0;
  15. }
  16. int main(){
  17. char a[20] = "abcd";
  18. char b[20] = "abdd";
  19. int tmp = my_strncmp(a,b,3);
  20. printf("%d\n",tmp);
  21. tmp = my_strncmp(a,b,2);
  22. printf("%d\n",tmp);
  23. return 0;
  24. }

三、字符串的切割

3.1 库函数strtok的使用

函数返回类型为char* ,首个参数为被切割的字符串,其次是切割字符串的分割符。

strtok函数会改变被操作的字符串,所以在使用strtok函数时一般要先临时拷贝一份

4adfb2396f024f0780c83f3be5a85900.png

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main(){
  4. char a[20] = "abcd#abc^ab#a";
  5. char* p = NULL;
  6. p = strtok(a,"#^"); //首次调用时,函数找到第一个标记并记录在字符串中的位置,并将其改为\0
  7. while(p != NULL){
  8. printf("%s\n",p);
  9. p = strtok(NULL,"#^"); //函数在同一字符串中的保存位置开始查找
  10. }
  11. return 0;
  12. }
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main(){
  4. char a[20] = "abcd#abc^ab#a";
  5. char* p = NULL;
  6. for(p = strtok(a,"#^");p != NULL;p = strtok(NULL,"#^")){
  7. printf("%s\n",p);
  8. }
  9. return 0;
  10. }

 

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

闽ICP备14008679号