当前位置: 首页 > news >正文

DAY11 字符串处理函数

1.测字符串长度函数

头文件: #include <string.h>
函数定义: size_t strlen(const char *s);
函数功能:
测字符指针 s 指向的字符串中字符的个数,不包括 ’\0’
void fun01()
{char *num = "hello";int len = strlen(num);printf("%d\n",len);
}

2.字符串拷贝函数

头文件: #include <string.h>
函数的定义: char *strcpy(char *dest, const char *src);
函数的说明:
拷贝 src 指向的字符串到 dest 指针指向的内存中, ’\0’ 也会拷贝
函数的返回值:
目的内存的地址
注意:在使用此函数的时候,必须保证 dest 指向的内存空间足够大,否则会出现内存污染
char *strncpy(char *dest, const char *src, size_t n);
函数的说明:
src 指向的字符串前 n 个字节,拷贝到 dest 指向的内存中
返回值 : 目的内存的首地址
注意:
1 strncpy 不拷贝 ‘\0’
2 、如果 n 大于 src 指向的字符串中的字符个数,则在 dest 后面填充 n-strlen(src) ’\0’
void fun02()
{char *num1 = "helloworld";char *num2 = (char *)malloc(strlen(num1+1));if(num2 == NULL){printf("内存开辟失败");return;}strcpy(num2,num1);printf("%s\n",num2);if(num2 != NULL){free(num2);num2 = NULL;}}

3、字符串追加函数

头文件: #include <string.h>
函数定义: char *strcat(char *dest, const char *src);
函数功能:
strcat 函数追加 src 字符串到 dest 指向的字符串的后面。追加的时候会追加 ’\0’
注意:保证 dest 指向的内存空间足够大。
void fun07()
{char str01[15] = "hello";char *str02 = "world";strcat(str01,str02);printf("%s\n",str01);
}

4.字符串比较函数

strcmp/strncmp
// 比较
头文件: #include <string.h>
函数定义 :int strcmp(const char *s1, const char *s2);
函数说明:
比较 s1 s2 指向的字符串的大小,
比较的方法:逐个字符去比较 ascII 码,一旦比较出大小返回。
如过所有字符都一样,则返回 0
返回值:
如果 s1 指向的字符串大于 s2 指向的字符串 返回 1
如果 s1 指向的字符串小于 s2 指向的字符串 返回 -1
如果相等的话返回 0
int strncmp(const char *s1, const char *s2, size_t n);
函数说明:比较 s1 s2 指向的字符串中的前 n 个字符
void fun03()
{char str01[] = "hello";char *str02 = (char *)malloc(strlen(str01)+1);strcpy(str02,str01);str01[0] = 'H';strcmp(str01,str02);printf("str02 = %s\n",str02);
}
void fun09()
{char *str01 = "helloworld";char *str02 = "hello c++";int x = strncmp(str01,str02,6);printf("x =%d\n",'w');
}

5.字符查找函数

头文件: #include <string.h>
函数定义: char *strchr(const char *s, int c);
函数说明:
在字符指针 s 指向的字符串中,找 ascii 码为 c 的字符
注意,是首次匹配,如果过说 s 指向的字符串中有多个 ASCII c 的字符,则找的是第 1 个字符
返回值:
找到了返回找到的字符的地址,
找不到返回 NULL
函数定义: char *strrchr(const char *s, int c);
函数的说明:末次匹配
s 指向的字符串中,找最后一次出现的 ASCII c 的字符,
返回值:
末次匹配的字符的地址。
void fun12()
{char *str = "abcdellll";char *p1 = strstr(str,"cde");printf("%ld\n",p1-str);
}

6.字符串匹配函数

#include <string.h>
char *strstr(const char *haystack, const char *needle);
函数说明:
haystack 指向的字符串中查找 needle 指向的字符串,也是首次匹配
返回值:
找到了:找到的字符串的首地址
每找到:返回 NULL
void fun10()
{char *str01 = "hello" ;char *pl = strchr(str01,'l');printf("%p\n",pl);if(pl != NULL){printf("%c\n",*pl);printf("%d\n",pl-str01);}
}

7.字符串转换数值

atoi/atol/atof
// 字符串转换功能
头文件: #include <stdlib.h>
函数的定义: int atoi(const char *nptr);
函数的功能:
nptr 指向的字符串转换成整数,返回
例 8:
int num;
num=atoi(“123”);
则 num 的值为 123
long atol(const char *nptr);
double atof(const char *nptr);
void fun13()
{int nums = atoi("123");printf("%d\n",nums);
}

8.字符串切割函数:

头文件: #include <string.h>
函数定义: char *strtok(char *str, const char *delim);
函数的功能:
字符串切割,按照 delim 指向的字符串中的字符,切割 str 指向的字符串。
其实就是在 str 指向的字符串中发现了 delim 字符串中的字符,就将其变成 ’\0’,
调用一次 strtok 只切割一次,切割一次之后,再去切割的时候 strtok 的第一个参数
NULL ,意思是接着上次切割的位置继续切
注意如果 str 字符串中出现了连续的几个 delim 中的字符,则只将第一个字符变成 ’\0’
void fun20()
{char s[] = "123,,,...456##..789,,..";char *buf[3] = {s,NULL};int i = 0;while(1){buf[i] = strtok(buf[i],",.#");if (buf[i] == NULL){break;}i++;}for(int j = 0; j < 3; j++){printf("%s\n",buf[j]);}
}

9.格式化字符串操作函数

int sprintf(char *buf, const char *format, );
\\ 输出到 buf 指定的内存区域。
例:
char buf[20];
sprintf(buf,"%d:%d:%d",2013,10,1);
printf(“buf=%s\n”,buf);
void fun23()
{   //int sprintf (char *__restrict __s,const char *__restrict __format, ...)//参数://s:写入的内存的首地址//format:格式化语句//值char str[100];sprintf(str,"%d年%d月%d日",2023,11,6);printf("%s\n",str);
}

int sscanf(const char *buf,const char *format, );
\\ buf 指定的内存区域中读入信息
例: int a, b, c;
sscanf("2013:10:1", "%d:%d:%d", &a, &b, &c);
printf(“%d %d %d\n”,a,b,c);
void fun27()
{char *str = "1234567890";int num = 0;char c = 0;char s[3];sscanf(str,"%3d%c%s",&num,&c,s);printf("%d\n",num);printf("%c\n",c);printf("%c\n",*s);
}

sscanf 高级用法
1 、跳过数据: %*s %*d
例: sscanf("1234 5678", "%*d %s", buf);
2 、读指定宽度的数据: %[width]s
void fun28()
{char *str = "1234567890";int num = 0;sscanf(str,"%*2d%2d",&num);printf("%d\n",num);
}

3 、支持集合操作:只支持获取字符串 %[a-z] 表示匹配 a z 中任意字符 ( 尽可能多的匹配 )
        %[aBc] 匹配 a B c 中一员,贪婪性
        %[^aFc] 匹配非 a Fc 的任意字符,贪婪性
        %[^a-z]表示读取除 a-z 以外的所有字符 贪婪性
void fun29()
{char *str = "abcdedfA123abc";char p[100];sscanf(str,"%[a-z]",p);printf("%s\n",p);
}
void fun30()
{char *str = "abcdedfA123abc";char p[100];sscanf(str,"%*[a-z]%[^a-z]",p);printf("%s\n",p);
}
void fun31()
{char *str = "aaaBccBaedf";char p[100];sscanf(str,"%[aBc]",p);printf("%s\n",p);}

10.const

1: 修饰普通变量,代表只读的意思
const int a=100;// 定义了一个只读变量 a 值为 100
以后在程序中,不能再给 a 赋值了
a=200;// 错误的, a 只读
2 const 修饰指针
(1) const char *str
意思是 str 指向的内存的内容不能通过 str 来修改
用来保护 str 指向的内存的内容
但是 str 的指向是可以改变的
char * strcpy(char *dest,const char *src);
(2) char * const str
意思是 str 是只读的变量, str 不能指向别的地方,
但是 str 指向的内存的内容,是有可能可以修改的
(3) const char * const str
str 不能指向别的地方,指向的内存的内容也不能通过 str 去修改

相关文章:

DAY11 字符串处理函数

1.测字符串长度函数 头文件&#xff1a; #include <string.h> 函数定义&#xff1a; size_t strlen(const char *s); 函数功能&#xff1a; 测字符指针 s 指向的字符串中字符的个数&#xff0c;不包括 ’\0’ void fun01() {char *num "hello";int len …...

Web自动化测试 —— PageObject设计模式!

一、page object 模式简介 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样板代码 driver/find/click 二、page object 设计原则 2.1、POM 模式的优势 降低 UI 变化导致的测试用例脆弱性问题让用例清晰明朗&#xff0c;与具体实现无关 2.…...

七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…...

Unreal Engine 学习笔记 (1)—— 日夜交替

1.创建关卡 文件新建关卡空白关卡保存关卡&#xff08;命名为NewWorld&#xff09; 2.创建蓝图类 创建蓝图类&#xff08;继承自Actor&#xff09; 命名为SunAndMoon 3.编辑SunAndMoon蓝图类 添加SkyAtmosphere添加SkyLight添加DirectionalLight将DirectionalLight重命名为…...

leetcode:189. 轮转数组(python3解法)

难度&#xff1a;中等 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4]解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3…...

基于PHP + MySQL实现的文章内容管理系统源码+数据库,采用前后端分离的模板和标签化方式

文章内容管理系统 dc-article是一个通用的文章内容管理系统&#xff0c;基于开源的caozha-admin开发&#xff0c;采用前后端分离的模板和标签化方式&#xff0c;支持文章内容管理、栏目分类管理、评论管理、友情链接管理、碎片管理、远程图片获取器等功能。可以使用本系统很轻…...

这可能是全网最晚的低代码技术总结

低代码的发展一向结伴着质疑前行&#xff0c;一些人认为低代码平台限制了开发人员的创新能力&#xff0c;使得开发过程变得过于简单&#xff0c;缺乏深度的定制和灵活性。他们担心&#xff0c;低代码平台可能只适合于简单的应用程序&#xff0c;无法满足复杂业务需求。另一面&a…...

leetcode2054

leetcode 2054 #include <iostream> #include <vector> #include <tuple> #include <algorithm>using namespace std;struct Event {// 时间戳int ts;// op 0 表示左边界&#xff0c;op 1 表示右边界int op;int val;Event(int _ts, int _op, int _v…...

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式&#xff0c;它们在软件开发中用于组织和设计代码的方式。 面向过程编程&#xff08;Procedural Programming&#xff09;是一种以过程&#xff08;函数、方法&#xff09;为核心的编程方式。在面向过程…...

【星海出品】VUE(六)

插槽Slots 传递属性 attribute App,vue <script> import SlotsBase from "./components/SlotsBase.vue" import SlotsTow from "./components/SlotsTow.vue" export default {components:{SlotsBase,SlotsTow},data(){return{message: "父集 m…...

华为政企闪存存储产品集

产品类型产品型号产品说明 maintainProductOceanStor Dorado 2000 SAS 128GB华为OceanStor Dorado 2000是一款简单、可靠、绿色的全闪存存储系统&#xff0c;极简部署、智能运维、轻量便捷&#xff0c;功能齐全&#xff0c;广泛适用于虚拟化、数据库、办公自动化、分支机构等…...

【项目源码】反编译Java字节码生成源码

【项目源码】反编译Java字节码生成源码 文章目录 【项目源码】反编译Java字节码生成源码参考资料一、什么是反编译&#xff1f;二、反编译Java字节码文件1. &#xff08;不一定有效&#xff09; 使用IDEA提供的插件 - Java Bytecode Decomplier2. &#xff08;推荐&#xff09;…...

技术分享 | 测试人员必须掌握的测试用例

测试用例&#xff08;Test Case&#xff09;是为特定的目的而设计的一组测试输入、执行条件和预期结果的文档。它的作用其实就是为了测试是否满足某个特定需求。测试用例是指导测试工作进行的依据。 测试用例的组成 标准的测试用例通常由以下几个模块组成&#xff1a; 用例编…...

Rabbit的高可用机制

RabbitMQ是一个消息中间件&#xff0c;提供了多种高可用机制来确保系统在出现故障时仍能保持可用性。以下是RabbitMQ的一些高可用机制&#xff1a; 镜像队列&#xff08;Mirrored Queues&#xff09;&#xff1a; 作用&#xff1a; 镜像队列可以在集群中复制队列的消息到多个节…...

函数调用指令, 返回机制分析(x86_64)

预备 #include <stdio.h>int addDetail(int a, int b) {return a b; }int add(int a, int b) {int c;c addDetail(a, b);return c; }int main(int argc, char *argv[]) {int sum;sum add(3, 5);printf("sum %d\n", sum);return 0; }汇编 main add addDeta…...

mkl库配置

cmake卸载旧版本&#xff0c;并升级 https://blog.csdn.net/weixin_41010198/article/details/109343347 pip install -U cmake3.25.2BUILDMODEDEBUG . build.sh安装mkl https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-download.html?operatingsyst…...

MPLAB X IDE 仿真打断点提示已中断的断点?

这种中间带裂缝的是无效断点。 原因可能与XC编译器的优化有关&#xff0c;最后生成的汇编与C语言并不是一一对应的(官方给的解释是效率高)。所以这一行C语言转换的汇编代码可能并不在这个位置&#xff0c;也可能与其它汇编合并后根本就没有 我的解决方法是把优化等级调到最低&a…...

Appium 移动端自动化测试,触摸(TouchAction) 与多点触控(MultiAction)

一、触摸 TouchAction 在所有的 Appium 客户端库里&#xff0c;TouchAction 触摸对象被创建并被赋予一连串的事件。 规范里可用的事件有&#xff1a; * 短按(press) * 释放(release) * 移动到(moveTo) * 点击(tap) * 等待(wait) * 长按(longPress) * 取消(cancel) * 执行(per…...

大厂面试题-innoDB如何解决幻读

从三个方面来回答&#xff1a; 1、Mysql的事务隔离级别 Mysql有四种事务隔离级别&#xff0c;这四种隔离级别代表当存在多个事务并发冲突时&#xff0c;可能出现的脏读、不可重复读、幻读的问题。 其中InnoDB在RR的隔离级别下&#xff0c;解决了幻读的问题。 2、什么是幻读&…...

深度学习之基于Tensorflow人脸面部表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Tensorflow的人脸面部表情识别系统是一种基于深度学习技术的图像处理应用&#xff0c;该系统主要通过人脸图像数…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...