前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串函数(一)之常见用法

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

作者头像
lovevivi
发布2022-11-10 14:39:00
2330
发布2022-11-10 14:39:00
举报
文章被收录于专栏:萌新的日常

前言

一.strlen函数

1.用法

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

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
int main()
{
  if(strlen("abc")-strlen("abcdef")>0)
  {
  printf(">\n");
  }
  else
  {
  printf("<"\n);
  }
  return 0;
}

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

2.模拟实现strlen函数

代码语言:javascript
复制
#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;
 }

二.strcpy函数

1.用法

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

代码语言:javascript
复制
#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;
}

2.模拟实现strcpy函数

代码语言:javascript
复制
#include<stdio.h>
#inlcude<assert.h>
char* mystrcpy(char*dest,const char*src)//这里的src为要传递arr2,不能改变src指针本身 
{
 asser(src!=NULL&amp;&amp;dest!=NULL);
 char*ret=dest;
  while(*dest++=*src++)
  {
     ;
  }
  return ret;
 }
int main()
{
 char arr1[20]="XXXXXXXX";
 char arr2[]="hello";
 mystrcpy(arr1,arr2);
 return 0;
}

三.strcat函数

1.用法

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

代码语言:javascript
复制
#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;
}

2.模拟实现strcat函数

代码语言:javascript
复制
#include<stdio.h>
#include<assert.h>
char* strcat(char*dest,const char*src)//srcu所指向的内容不可以改变 指针本身可以改变
{
assert(dest&amp;&amp;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;
}

四.strcmp函数

1.用法

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

代码语言:javascript
复制
#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 若 在某个字符 第一个字符小于第二个字符 则数组1<数组2 例: abbb abq b<q 所以abbb<abq

2.模拟实现strcmp函数

代码语言:javascript
复制
#include<stdio.h>
#include<assert.h>//const和assert断言都可不加 加上是为了代码的健壮
int mystrcmp(const char*s1,const char*s2)
{
 assert(s1&amp;&amp;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;

五.strstr函数

1.用法

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

代码语言:javascript
复制
#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;
}

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

2.模拟实现strstr函数

代码语言:javascript
复制
#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&amp;&amp;*s2&amp;&amp;(*s1==*s2))//为了防止两者相同的情况发生
  {
  s1++;
  s2++;
  }
  if(*s2=='\0')
  {
    return (*cp);//cp为const修饰的 想要返回char* 要强制类型转换
  }
  cp++;
 }
 return NULL;
int main()
{
 char arr1[]="abbbcdef";
 char arr2[]="bbc";
 char*p=mystrtsr(arr1,arr2);
 if(p==NULL)
 {
 printf("没找到\n");
 }
 else
 {
 printf(找到了:%s",p);//bbcdef
 }
 return 0;
}

六.strtok函数

1.用法

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

代码语言:javascript
复制
 #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;
}

结果为 2637 qq com

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一.strlen函数
    • 1.用法
      • 2.模拟实现strlen函数
      • 二.strcpy函数
        • 1.用法
          • 2.模拟实现strcpy函数
          • 三.strcat函数
            • 1.用法
              • 2.模拟实现strcat函数
              • 四.strcmp函数
                • 1.用法
                  • 2.模拟实现strcmp函数
                  • 五.strstr函数
                    • 1.用法
                      • 2.模拟实现strstr函数
                      • 六.strtok函数
                        • 1.用法
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档