• 字符串函数(一)之常见用法



    前言

    一.strlen函数

    1.用法

    计算字符串长度
    但应注意 使用 string.h头文件
    strlen函数返回值为 unsigned int

    #include<stdio.h>
    #include<string.h>
    int main()
    {
      if(strlen("abc")-strlen("abcdef")>0)
      {
      printf(">\n");
      }
      else
      {
      printf("<"\n);
      }
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    如果我们正常来看 strlen(“abc” )---- 3 strlen("abcdef’)----6
    3-6应为 -3 但是-3为无符号数 所以应该输出-3的补码
    即一个很大的数 为 >

    2.模拟实现strlen函数

    #include<stdio.h>
    #include<assert.h>
    int mystrlen(const char*str)//const 在*左边代表指针指向的内容不能被改变   ,指针本身可以改变
    {
    assert(str!=NULL);
       int sum=0;
       while(*str!='\0')
       {
         sum++;
         str++;
       }
       return sum;
    }
    int main()
    {
     char arr[]="hello";
     int ret=mystrlen(arr);
     printf("%d\n",ret);//5
     return 0;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    二.strcpy函数

    1.用法

    拷贝函数
    将arr2拷贝到arr1中
    使用头文件<string.h>
    但是必须保证arr1能够放下arr2
    需要注意的是 拷贝时 将’\0’也会拷贝过去

    #include<stdio.h>
    #include<string.h>
    int main()
    {
      char arr1[20]="XXXXXXXX";
      char arr2[]="hello";
      strcpy(arr1,arr2);
      printf("%s\n",arr1);//hello
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.模拟实现strcpy函数

    #include<stdio.h>
    #inlcude<assert.h>
    char* mystrcpy(char*dest,const char*src)//这里的src为要传递arr2,不能改变src指针本身 
    {
     asser(src!=NULL&&dest!=NULL);
     char*ret=dest;
      while(*dest++=*src++)
      {
         ;
      }
      return ret;
     }
    int main()
    {
     char arr1[20]="XXXXXXXX";
     char arr2[]="hello";
     mystrcpy(arr1,arr2);
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    三.strcat函数

    1.用法

    字符串追加
    但是必须保证arr1数组足够大

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    char arr1[20]="hello ";
    char arr2[]="world";
    strcat(arr1,arr2);
    printf("%s\n"arr1);//hello worlld
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.模拟实现strcat函数

    #include<stdio.h>
    #include<assert.h>
    char* strcat(char*dest,const char*src)//srcu所指向的内容不可以改变 指针本身可以改变
    {
    assert(dest&&src);
      char*ret=dest;
      while(*dest!='\0')
      {
       dest++;
      }
      while(*src!='\0')
      {
       *dest=*src;//如果dest加上const 此句就会报错
       dest++;
       src++;
      }
      return ret;
      
    int main()
    {
      char arr1 [20]="hello ";
      char arr2[]="world";
      char*ret=mystrcat(arr1,arr2);
      printf("%s\n,rett);//hello world
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    四.strcmp函数

    1.用法

    比较两个字符串的大小
    必须使用头文件 <string.h>

    #include<stdio.h>
    #include<string.h>
    int main()
    {
     char arr1[]="abbb";
     char arr2[]="abq";
     if(srcmp(arr,arr2)>0)//abbb<abq
     {
      printf(">"\n);
      }
      else
      {
      printf("<"\n);
      }
      return 0;
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    使用方法: 从首字符开始 如果两者相等 则继续向下
    若在某个字符 第一个字符大于第二个字符 则数组1>数组2
    若 在某个字符 第一个字符小于第二个字符 则数组1<数组2
    例:
    abbb
    abq
    b<q 所以abbb<abq

    2.模拟实现strcmp函数

    #include<stdio.h>
    #include<assert.h>//const和assert断言都可不加 加上是为了代码的健壮
    int mystrcmp(const char*s1,const char*s2)
    {
     assert(s1&&s2);
     while(*s1==*s2)
     {
     if(*s2=='\0')
     {
       return 0;
     }
      s1++;
      s2++;
     }
     if(*s1>*s2)
     {
     return 1;
     }
     else
     {
     return -1;
     }
    int main()
    {
     char arr1[]="abbb";
     char arr2[]="abq";
    int ret= mystrcmp(arr1,arr2);
    printf("%d\n",ret);//-1
     return 0;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    五.strstr函数

    1.用法

    strstr函数是在一个字符串中寻找另一个字符串
    必循使用<string.h>头文件

    #include<stdio.h>
    #include<string.h>
    int main()
    {
     char arr1[]="abcdefabcdef";
     char arr2[]="bcd";
     char*p=strstr(arr1,arr2);
     if(p==NULL)
      {
      printf("没找到\n");
      }
      else
      {
      printf("找到了:%s\n",p);//bcdefabcdef
      }
      return 0;
    }
     
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    如果没找到 返回 NULL
    如果找到了返回第一次出现的位置

    2.模拟实现strstr函数

    #include<stdio.h>
    #include<assert.h>
    char*mystrstr(const char*str1,const char*str2)
    {
     const char*s1=str1;
     const char*s2=str2;
     const char*cp=str1;
     if(*s2==='\0')
     {
      return (char*)str1;//str1也为const修饰的 所以需要强制类型转换
     }
     while(*cp)
     {
      s1=cp;
      s2=str2;
      while(*s1&&*s2&&(*s1==*s2))//为了防止两者相同的情况发生
      {
      s1++;
      s2++;
      }
      if(*s2=='\0')
      {
        return (*cp);//cp为const修饰的 想要返回char* 要强制类型转换
      }
      cp++;
     }
     return NULLint main()
    {
     char arr1[]="abbbcdef";
     char arr2[]="bbc";
     char*p=mystrtsr(arr1,arr2);
     if(p==NULL)
     {
     printf("没找到\n");
     }
     else
     {
     printf(找到了:%s",p);//bbcdef
     }
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    六.strtok函数

    1.用法

    切割字符串
    第一个参数为字符串本身 第二个参数为分隔符集合
    必须使用<string.h>头文件

     #include<stdio.h>
    #include<string.h>
    int main()
    {
    	char arr[] = "2637@qq.com";
    	const char* p = "@ .";
    	char tmp[20] = { 0 }; //strtok一般会切割字符串 所以用临时拷贝
    	strcpy(tmp, arr);
    	char* ret = NULL;
    	ret = strtok(tmp, p);//第一次传字符串本身 会将第一次遇见的分隔符变成'\0'并返回起始位置地址
    	printf("%s\n", ret);
    	ret = strtok(NULL, p);//为NULL时 在上次分隔符开始 直到再次遇见分隔符 变成'\0'
    	printf("%s\n", ret);
    	ret = strtok(NULL, p);
    	printf("%s\n", ret);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结果为 2637 qq com

  • 相关阅读:
    新闻轮播图
    HTTP与HTTPS的区别及HTTPS如何安全的传输数据
    持续的敏捷转型--我们的经验
    Dlib库实现人脸关键点检测(Opencv实现)
    1、认识时间复杂度和简单的排序算法
    无序链表(顺序查找)和有序数组(二分查找)-基础实现-符号表(二)-数据结构和算法(Java)
    只要有开始,就会有进​步
    使用cpolar发布树莓派网页(cpolar隧道的完善)
    python篇---python打印报错行
    shell脚本处理日志转化为JsonArray
  • 原文地址:https://blog.csdn.net/qq_62939852/article/details/125594379