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

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...