C语言——字符串相关函数

概述

由系统提供的对字符串处理的函数

所属头文件

string.h

strlen:测量字符串长度

语法

size_t strlen(const char *s);
参数 :
要测量的字符串
返回值
长度
注意 :
测量的长度不包括 \0

示例

char *str = "hello";
int len = strlen(str);
printf("str len=%d\n",len);

strcpy:拷贝字符串(深拷贝)

浅拷贝:拷贝的是地址

:
//char *str01 = "abc";// 此时 abc 在常量区 ,str01 指向常量区 , 此时不能
对其值进行修改
char str01[] = "abc";// 将常量区的 abc 拷贝到 str01 所在的栈的区域
char *str02 = str01;// 此时产生浅拷贝 , 只拷贝了 str01 的地址 , 并没有拷
贝其值 , 那么此时 str01 str02 指向同一位置
str01[0] = 'A';// str01 被修改后 ,str02 打印的内容也将被修改
printf("str01 = %s\n",str01);
printf("str02 = %s\n",str02);

深拷贝:拷贝的是内容

:
char str01[] = "abc";
char *str02 = (char *)malloc(100);
memset(str02,0,100);
strcpy(str02,str01);// 使用 strcpy 函数对字符串拷贝为深拷贝 , str01
的内容拷贝到 str02 , 此时 str01 str02 指向的地址不同
str01[0] = 'A';// 修改 str01 中的内容 , 并不会影响 str02 中的内容
printf("str01 = %s\n",str01);
printf("str02 = %s\n",str02);

语法

char *strcpy(char *dest, const char *src);
参数 :
dest: 目标位置
src: 资源位置
返回值 :
就是目标位置

作用:将src的内容赋值给dest

char *strncpy(char *dest, const char *src, size_t n);
参数 :
dest: 目标位置
src: 资源位置
n: 拷贝的字节数
返回值 :
就是目标位置

作用:srcn个字节的内容赋值给dest

注意 :
使用该函数需注意目标位置指向的内存大小要足够

strcmp函数:比较字符串内容是否相同

语法

int strcmp(const char *s1, const char *s2);
参数 :
s1: 字符串 1
s2: 字符串 2
返回值 :
0 相同
0 不同

strchr函数:查询单个字符首次出现的位置

语法

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

作用:

s 中查询 c 第一次出现的位置
参数 :
s: 被查找的字符串
c: 要查找的字符
返回值 :
c 第一次出现的位置的地址
如果 c 不存在则返回 NULL
char *strrchr(const char *s, int c);

strstr函数:查找指定字符串出现的位置

语法

char *strstr(const char *haystack, const char *needle);
参数 :
haystack: 被查找的字符串
needle: 要查找的字符串
返回值 :
查找到的字符串第一次出现的位置
如果不存在返回 NULL

atoX:转数字

int atoi(const char * p);
将字符串型的整数 , 转换为 int
double atof(const char * p);
将字符串型的浮点数 , 转换为 double

strtok:切割字符串

语法

char *strtok(char *str, const char *delim);
参数 :
str: 被切割的字符串
delim: 以什么切割
返回值 :
切割后的字符串

注意

每调用一次该函数 , 切割一次
切割上一次剩余的字符串时 str NULL

示例1

void method07()
{
char str[] = "hehehe:::::::::hahaha#xixixi@lalala:heiheihei";
char tag[] = ":#@";
char *p = strtok(str,tag);
printf("str = %s\n",str);
printf("p = %s\n",p);
// 当被切割的字符串为 NULL, 将会切割上一次剩余的字符串
char *p2 = strtok(NULL,tag);
printf("p2 = %s\n",p2);
}

格式化字符串


sprintf

int sprintf(char *str, const char *format, ...);

作用:

str 指向的内存中写入指定内容 ,format 格式化字符串 ,... 替换占位符的值

sscanf

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

作用:

str 中按 format 获取数据到 ...

注意

  %d:只能取整数
%c:一次读取一个字符
%s:与空格,换行,\0读取结束
%2d:取两位整数,如果超过2位取两位,不足两位有几位取几位
%*d:跳过整数
%*2d:跳过两位整数
%[a-z] 表示匹配 a 到 z 中任意字符(尽可能多的提取,遇除a-z以外结束)
贪婪性:尽可能多的提取
%[aBc] 匹配 a、B、c 中一员,贪婪性
%[^aFc] 匹配非 a Fc 的任意字符,贪婪性,遇a,F,c结束
%[^a-z]表示读取除 a-z 以外的所有字符  

示例

char buf[20];
sscanf("gl@1000phone.com","%*[^@]@%[^.]",buf);
printf("%s\n",buf);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值