首页 > 其他分享 >C语言字符串处理相关函数

C语言字符串处理相关函数

时间:2024-11-22 16:44:48浏览次数:3  
标签:const 函数 int C语言 char str printf 字符串

作用:

处理字符串,如计算字符串长度,查找字符串中指定的字符或字符串,切割字符串等

头文件:

string.h

相关函数:

strlen

作用:测量字符串长度

语法:size_t strlen(const char *s);        参数:s:要测量的字符串的首地址        返回值:测量的字符串串长度

注意:不包含\0,遇到\0结束

strcpy

作用:拷贝字符串,属于深拷贝,拷贝的是内容

概述:拷贝内容为深拷贝,深拷贝后修改其中一个内容,不会影响另一个

        拷贝地址为浅拷贝,浅拷贝后修改其中的一个内容,另一个也会被修改

语法:char *strcpy(char *dest,const char *src);        参数:dest:目标地址        src:要拷贝的字符串

        char *strncpy(char *dest,const char *src,size_t n);        参数:dest;目标地址        src:要拷贝的字符串        n:拷贝的长度,不包含\0.

strcat

作用:在原字符串尾部追加内容

语法:char *strcat(char *dest, const char *src);        参数:dest:目标地址        src:要追加的字符串

        char *strncat(char *dest, const char *src, size_t n);        参数:dest:目标地址        src:要追加的字符串        n:追加的长度

strcmp

作用:比较字符串的内容是否相同

语法:int strcmp(const char *s1,consr char *s2);

        int strncmp(const char *s1,const char *s2, size_t n);

参数:s1:字符串1,s2:字符串2        返回值:0相同,非0不相同

strchr

作用:查找指定字符在字符串出现的位置

语法:char *strchr(const char *s, int c);        参数:s:字符串        c:查找的字符        返回值:查找到字符出现的位置的内存地址,如果不存在返回NULL

        char *strrchr(const char *s, int c);

strstr

作用:查找子字符串在字符串中出现的位置

语法:char *strstr(const char *haystack,const char *needle);        参数:haystack:字符串        needly:子字符串        返回值:查找到子字符串在字符串中第一次出现的首地址,如果为NULL证明不存在

ato~

作用:将字符串转换为同样的数字        如:将"10"(字符)转换为10(数字)

语法:int atoi(const *nptr);将字符串转换为int数据

        long atol(const *char *nptr);将字符串转成        long

        double atof(const char *nptr);将字符串转成        double

注意:所属头文件stdlib.h

strtok

作用:切割字符串

语法:char *strtok(char *str, const char *delim);        参数:str:要切割的字符串        delim:按什么切割

返回值:切割后的字符串,如果返回值为NULL表示切割结束

注意:str如果为NULL表示延续上一次的切割结果继续切割

如:

char str[] = "hehehe....\r\nhahaha,,,@!lalala";

char tag[] = ".\r\n@!";

char *s = strtok(str,tag);

char *s2 = strtok(NULL,tag);

char *s3 = strtok(NULL,tag);

char *s4 = strtok(NULL,tag);

格式化字符串(组包与解包)

概述:对字符串进行格式化的要求

前置了解

sprintf

作用:将多个数据组装为一个字符串

语法:引入头文件:#include<stdio.h>

        函数:int sprintf(char *str, const char *format, ...)

        参数:str:组装好的字符串存储位置        format:格式        ...:替换占位符使用的数据

sscanf

作用:将一个字符串解析为多个数据

语法:引入都文件:#include<stdio.h>

        函数:int sscanf(const char *str, const char *format, ...);

        参数:str:要解的数据包        format:格式        ... :存储解析好的数据地址

如:

1>        %d:提取数值,只能取'0~9'

void fun01()

{

        char *str = "2023年11月11日"

        int x = 0;

        int y = 0;

        int z = 0;

        sscanf(str,"%d年%d月%d日",&x,&y,&z);

        printf("%d %d %d\n",x,y,z)

}

2>        %c提取一个字符

void fun02()

{

        char *str = "2023年11月11日";

        char x;

        sscanf(str,"%c",&x);

        printf("%\n",x);

}

3>        %s遇到空格,回车,\0结束提取

void fun03()

{

        char *str = "hello wold";

        char str1[20];

        char str2[20];

        sscanf(str,"%s %s",str1,str2);

        printf("str1=%s",str1);

        printf("str2=%s",str2);

}

4>        %2d %2s 提取时规定长度

void fun04()

{

        char *str = "12 c++hi";

        int num;

        char str1[20];

        sscanf(str,"%2d%3s",&num,str1);

        printf("num=%dn",num);

        printf("str1=%s\n",str1);

}

5>        %*d %*s 跳过匹配数据

void fun5()

{

        char *str = "1234567890";

        int num1;

        int num2;

        sscanf(str,"%*2d%*2d%*3d1d",&num1,&num2);

        printf("num1 = %d\n",num1);

        printf("num2 = %d\n",num2);

6>        %[a-z]表示a到z中的任意字符(遇到a-z以外的结束)        贪婪性:尽可能的多取

void fun6()

{

        char *str = "hic123++";

        char tag[10];

        sscanf(str,"%[a-z]",tag);

        printf("%s\n",tag);

}

7>        %[aBc](自定义)匹配a,B,c中的任意项,贪婪性

void fun7()

{

        char buf[20];

        sscanf("acaaBcdan","%[aBc]",buf);

        printf("%s\n",buf);

}

8>        %[^aFc]  匹配非a F c的任意项,贪婪性

void fun8()

{

        char buf[20];

        sscanf("acaaBcdan","%[^B]",buf);

        printf("%s\n",buf);

}

9>        %[^a-z]表示读取除a-z以外的所有字符

void fun9()

{

        char buf[20];

        sscanf("acaaBcdan","%[^A-Z]",buf);

        printf("%s\n",buf);

}

10>        

void fun10()

{

        char buf[20];

        sscanf("[email protected]","%*[^@]@%[^.]",buf);

        printf("%s\n",buf);

}

标签:const,函数,int,C语言,char,str,printf,字符串
From: https://blog.csdn.net/weixin_74792661/article/details/143893433

相关文章

  • 超全!python中字符串拼接的各种姿势
    Python提供了多种字符串拼接的方式,每种方式在性能、可读性和灵活性上各有特点。以下是常见的字符串拼接方式及其总结:1.使用+操作符s1="Hello"s2="World"result=s1+""+s2#HelloWorld特点:简单易懂,适合小规模拼接。多个+拼接可能生成多个中间字符......
  • Shell脚本入门指南(二):环境变量与字符串操作
    声明学习视频来自B站up主**泷羽sec**有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站......
  • C语言_算法例题_PAGE2
    算法例题求1x2x3x4x5#include<stdio.h>intmain() { inti,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf("%d\n",t); return0; {求1x3x5x7x9#include<stdio.h>voidmain() { inti,j; ......
  • c语言中块作用域的优先级高于文件作用域
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>inta=100;//该变量具有文件作用域intmain(void){printf("a=%d\n",a);//在程序快中调用外部变量return0;}[root@PC1test]#gcctest.c-......
  • Linux内核的spi_sync函数传输期间片选信号一直有效嘛?
         1、不是的,下图可以看到发送单个message时拉片选了,所以spi_sync函数传输期间CS会一直跳变,所以无法像I2C一样组装符合某个外设的报文队列。    2、但是使用自己的软件CS片选,就可以控制它在spi_sync函数传输期间保持低电平。    3、其中的某个使......
  • EXPORT_SYMBOL函数用法
    1、作用:EXPORT_SYMBOL()内定的函数或者符号对全部内核代码公开,不用修改内核代码就 可以在内核模块中直接调用,即使用EXPORT_SYMBOL()可以将一个函数导出给其他模块使用。 2、使用方法: 在模块函数定义之后使用“EXPORT_SYMBOL(函数名)”来声明; 在调用该函数的另外一个模块......
  • C语言_入门例题_PAGE1
    入门例题在屏幕上输入一行信息#include<stdio.h>intmain() { printf("ThisisaCprogram.\n"); return0; }求两个整数之和#include<stdio.h>intmain() { inta,b,sum; a=123; b=456; sum=a+b; printf("sumis%d\n",sum);//%d是指定输......
  • 写一个函数找出给定数组中的最大差值
    /***Findsthemaximumdifferencebetweenanytwoelementsinanarray.**@param{number[]}arrTheinputarrayofnumbers.*@returns{number}Themaximumdifference,or0ifthearrayisemptyorhasonlyoneelement.*/functionfindMaxDifferen......
  • 请写出一个函数求出N的阶乘(即N!)
    /***Calculatesthefactorialofanon-negativeinteger.**@param{number}nThenon-negativeinteger.*@returns{number}Thefactorialofn,or1ifnis0.*Returns-1ifnisnegativeornotaninteger.*/functionfactori......
  • 力扣面试题 - 25 二进制数转字符串
    题目:二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。示例1:输入:0.625输出:"0.101"示例2:输入:0.1输出:"ERROR"提示:0.1无法被二进制准确表示提示:32位包括输......