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

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

@TOC


前言

一.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;
}

如果我们正常来看 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;
 }

二.strcpy函数

1.用法

拷贝函数

   将arr2拷贝到arr1中

   使用头文件

   但是必须保证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;
}

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;
}

三.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;
}

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;
}

四.strcmp函数

1.用法

比较两个字符串的大小

必须使用头文件

#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函数

#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;

五.strstr函数

1.用法

strstr函数是在一个字符串中寻找另一个字符串

必循使用头文件

#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函数

#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 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.用法

切割字符串

  第一个参数为字符串本身 第二个参数为分隔符集合

  必须使用头文件

#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

目录
相关文章
|
6月前
|
C++
18字符串处理函数
18字符串处理函数
26 0
|
10天前
c常用 字符串处理函数
字符串处理函数 puts()将一个字符串输出到终端 gets()从终端输入一个字符串到字符数组,并且得到一个函数值。 strcat()链接两个字符数组中的字符串。 strcpy()字符串复制函数。 strcmp()比较字符串作用。 strlen()测试字符串长度的函数不包括“\0” strlwr()将字符串中的大写字母转换为小写字母。 strupr()将字符串中的小写字母转换为大写字母。
26 7
|
5月前
字符串\字符串处理常用函数
字符串\字符串处理常用函数
34 2
|
6月前
|
索引 Python
使用字符串处理函数的文章
在编程中,字符串处理是一项常见的任务,涉及到对文本数据的各种操作,如查找、替换、分割、连接等。为了简化这些操作,许多编程语言都提供了一系列的字符串处理函数。本文将介绍一些常用的字符串处理函数,并附上相应的代码示例。
29 0
C/C++字符串处理函数
C/C++字符串处理函数
|
C语言
【C语言】字符函数和字符串函数(二)—>函数应用实例
【C语言】字符函数和字符串函数(二)—>函数应用实例
61 0
字符串处理函数总结
使用字符串处理函数 注意:在使用后字符串处理函数时,应当在程序文件的开头用
83 0
|
存储 编译器
字符串操作函数详解
字符串操作函数详解
字符串操作函数详解