作用:
处理字符串,如计算字符串长度,查找字符串中指定的字符或字符串,切割字符串等
头文件:
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