当前位置: 首页 > 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;该系统主要通过人脸图像数…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...