蓝桥杯物联网竞赛_STM32L071KBU6_字符串处理

前言:

个人感觉国赛相较于省赛难度上升的点在于对于接收的字符串的处理,例如串口发送的字符串一般包含字母字符串 + 数字字符串,亦或者更复杂,对于LORA也是如此,传递的字符串如#9#1亦或者#1a#90,#1#12,如何将字符串中的数字信息快速高效的处理好,并赋值给我们需要的变量是及其重要的,国赛的功能更复杂时间更紧迫,那么高效处理这些复杂字符串是及其重要的

C字符串处理函数:

我认为最好的方法就是利用c自带的函数,站在前人的肩膀上才能看的更远

要想处理好这些字符串需要用到如下函数,用这些函数配合使用,能达到不一样的效果:

处理上述字符串避免不了的是将字符串切割,比较,数字字符转换成与之对应的数字

那么与之对应的c函数就是strncmp,memcpy,strtof,分别为比较函数,复制函数,字符串转浮点型函数

函数的用法和实例:

1、strncmp函数 [使用#include<string.h>库]:

str是string的缩写n指定比对的个数为n,cmp是compare比较的意思

strncmp可以指定比较的两个字符串的起始位置和比较区间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>unsigned char a[10] = {'1', '\0', '2', '3', 'A'};
unsigned char b[10] = {'1', '\0', '2', '3', '9'};int main(){printf("%d", strncmp(a + 2, b + 2, 2));
}

在这里插入图片描述

strcmp比对成功返回0否者返还非零

strcmp在比对'\0'后会停下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>unsigned char a[4] = {'1', '\0', '2'};
unsigned char b[4] = {'1', '\0', '3'};int main(){printf("%d", strncmp(a, b, 4));
}

在这里插入图片描述

2、memcpy [需要string.h库]:

mem是memory即内存的缩写cpy即copy即复制的缩写

memcpy能指定被复制对象的起点,以及要复制的长度,这个能复制'\0'

3、strtof [需要stdlib.h库]:

f是float的缩写

这个函数能将字符串转换成实际浮点型数据,停止的条件要么是不能再转换要么是转换完成

其第二个需要设置的参数是二级指针,这个有点特别,这个指针可以指向最后一个被转换的字符的后一个数,也就是说这个二级指针二级解析的值是终止字符'\0'的话说明全部转换成功,否者转换不成功,这个指针牛儿b之的地方在于其能最后判断字符数字是否合法例如'12'合法'1A2'不合法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>char* a = "123";
char* b = "1A2";
char* p = NULL;
char* q = NULL;int main(){strtof(a, &p);strtof(b, &q);if(*p == '\0') printf("a合法\n");else printf("a不合法\n");if(*q == '\0') printf("b合法\n");else printf("b不合法\n"); return 0;
}

在这里插入图片描述

处理字符串实例:

判断字符串是不是以MAX和MIN开头,并判断MAX和MIN后面数字字符串是否合法,并转换:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>char a[20];
char* head1 = "MAX";
char* head2 = "MIN";unsigned char temp[10];
unsigned char checkflag = 1;int main(){scanf("%s", a);printf("%s\n", a);	char head[10];if(strncmp(a, head1, 3) * strncmp(a, head2, 3) == 0){printf("比对成功\n");}else{checkflag = 0;printf("比对失败\n");}if(checkflag == 1){memcpy(head, a + 3, strlen(a) - 3); // 截取后面数字部分char* p;float number = strtof(head, &p);if(*p != '\0'){printf("转换失败\n");checkflag = 0;}else{printf("截取数字为:%.1f\n", number); }}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接收多个数据并转换格式:#数据1#数据2

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int main(){char a[20];scanf("%s", a);char copy1[10];char copy2[10];unsigned char i = 1;unsigned char j = 0;while(a[i] != '#'){copy1[j ++] = a[i ++];}copy1[j] = '\0';i ++;j = 0;while(a[i] != '\0'){copy2[j ++] = a[i ++];}copy2[j] = '\0';printf("%s %s\n", copy1, copy2);char* p;float number1 = strtof(copy1, &p);char* q;float number2 = strtof(copy2, &q);if(*p == '\0' && *q == '\0'){printf("转换成功:%.1f && %.1f", number1, number2);}else{printf("%c %c\n", *p, *q);printf("转换失败"); }	
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剖析【C++】——类与对象(上)超详解——小白篇

目录 1.面向过程和面向对象的初步认识 1.面向过程&#xff08;Procedural Programming&#xff09; 2.面向对象&#xff08;Object-Oriented Programming&#xff09; 概念&#xff1a; 特点&#xff1a; 总结 2.C 类的引入 1.从 C 语言的结构体到 C 的类 2.C 中的结构…

调用萨姆索诺夫函数:深入探索函数的参数与返回值

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、萨姆索诺夫函数的引入与调用 二、如何获取函数的返回值 三、无参数与无返回值的函数调…

帝国CMS验证码不显示怎么回事呢?

帝国CMS验证码有时候会不显示或打叉&#xff0c;总结自己的解决方法。 1、检查服务器是否开启GD库 测试GD库是否开启的方法&#xff1a;浏览器访问&#xff1a;/e/showkey/index.php&#xff0c;如果出现一堆乱码或报错&#xff0c;证明GD库没有开启&#xff0c;开启即可。 2…

[随笔] 在CSDN的6周年纪念日随笔

纪念 转眼已过6年&#xff0c;大一的时候学习编程&#xff0c;潜水 CSDN 学习各类博文&#xff0c;才学浅薄就没有主动写博文记录自己的学习历程。 过了段时间刚刚到了大二&#xff0c;很喜欢 Todolist&#xff0c;意气风发的写下《一份清爽的编程计划》&#xff0c;哈哈。 …

数据结构-队列(带图详解)

目录 队列的概念 画图理解队列 代码图理解 代码展示(注意这个队列是单链表的结构实现) Queue.h(队列结构) Queue.c(函数/API实现) main.c(测试文件) 队列的概念 队列&#xff08;Queue&#xff09;是一种基础的数据结构&#xff0c;它遵循先进先出&#xff08;First In …

二十八、openlayers官网示例Data Tiles解析——自定义绘制DataTile源数据

官网demo地址&#xff1a; https://openlayers.org/en/latest/examples/data-tiles.html 这篇示例讲解的是自定义加载DataTile源格式的数据。 先来看一下什么是DataTile&#xff0c;这个源是一个数组&#xff0c;与我们之前XYZ切片源有所不同。DataTile主要适用于需要动态生成…

算法简单笔记2

5月26号&#xff0c;之前学了两天算法烦了&#xff0c;去学了几天鸿蒙&#xff0c;今天又回来看一下算法&#xff0c;距离6月1日国赛还有6天&#xff0c;哈哈真是等死咯...... 一、蓝桥杯第13届国赛第1题填空题&#xff1a;重合次数 &#xff08;半难不难&#xff0c;写编程难…

探索演进:了解IPv4和IPv6之间的区别

探索演进&#xff1a;了解IPv4和IPv6之间的区别 在广阔的互联网领域中&#xff0c;设备之间的通信依赖于一组独特的协议来促进连接。前景协议中&#xff0c;IPv4&#xff08;Internet 协议版本 4&#xff09;和 IPv6&#xff08;Internet 协议版本 6&#xff09;是数字基础设施…

内存泄漏案例分享3-view的内存泄漏

案例3——view内存泄漏 前文提到&#xff0c;profile#Leaks视图无法展示非Activity、非Fragment的内存泄漏&#xff0c;换言之&#xff0c;除了Activity、Fragment的内存泄漏外&#xff0c;其他类的内存问题我们只能自己检索hprof文件查询了。 下面有一个极佳的view内存泄漏例子…

OrangePi AIpro开箱测评

OrangePi AIpro(8T) 香橙派联合华为精心打造&#xff0c;建设人工智能新生态 章节一&#xff1a;引言 1.1 背景 香橙派&#xff08;OrangePi&#xff09;是深圳市迅龙软件有限公司旗下开源产品品牌&#xff0c;迅龙软件成立于2005年&#xff0c;是全球领先的开源硬件和开源软…

初识C语言——第二十九天

数组 本章重点 1.一维数组的创建和初始化 数组的创建 注意事项&#xff1a; 1.一维由低数组在内存中是连续存放的&#xff01; 2.随着数组下标的增长&#xff0c;地址是由低到高变化的 2.二维数组的创建和初始化 注意事项&#xff1a; 1.二维数组在内存中也是连续存放的&am…

YOLOv8+PyQt5面部表情检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

1.资源包含可视化的面部表情检测系统&#xff0c;基于最新的YOLOv8训练的面部表情检测模型&#xff0c;和基于PyQt5制作的可视化面部表情检测系统&#xff0c;包含登陆页面、注册页面和检测页面&#xff0c;该系统可自动检测和识别图片或视频当中出现的八类面部表情&#xff1a…

211大学计算机专业不考408,新增的交叉专业却考408!南京农业大学计算机考研考情分析!

南京农业大学信息科技学院可追溯至1981年成立的计算中心和1985年筹建的农业图书情报专业。1987年设立了农业图书情报系&#xff0c;1993 年农业图书情报系更名为信息管理系&#xff0c;本科专业名称也于1999年更名为信息管理与信息系统专业。1994年计算中心开始招收计算机应用专…

开源网页视频会议,WebRTC音视频功能比较

1. 概述 OpenAI 发布了新一代旗舰生成模型 GPT-4o,这是一款真正的多模态大模型,可以「实时对音频、视觉和文本进行推理」。 支持与 AI 实时语音对话,且响应时间达到毫秒级;交互中可识别人类情绪并以相应的情感做出回应;多语言能力的提升,WebRTC 成为大模型关键能力。 视频会议…

theharvester一键收集域名信息(KALI工具系列十)

目录 1、KALI LINUX简介 2、theharvester工具简介 3、在KALI中使用theharvester 3.1 用搜索引擎扫描 3.2 扫描并输出结果 3.3 扫描某域名下的所有账号 3.4 使用所有的搜索引擎扫描 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&…

【Docker学习】详细讲解docker ps

docker ps是我们操作容器次数最多的命令之一&#xff0c;但我们往往使用docker ps或是docker ps -a&#xff0c;对于该命令的其它选项&#xff0c;我们关注比较少。那么这一讲&#xff0c;我给大家详细讲讲该命令的全部方法。 命令&#xff1a; docker container ls 描述&am…

前后端项目部署和解决跨域

文章目录 一.前端项目部署1.1 上传前端文件1.2 项目部署1.3 解决跨域1.3.1 什么是跨域1.3.2 配置文件 二.后端项目部署2.1 上传后端文件2.2 项目部署2.3 解决跨域 一.前端项目部署 1.1 上传前端文件 站点创建好了&#xff0c;进入到站点的目录。 然后把它默认的文件删掉。 你…

2024.5.22 关于 SpringCloud —— Nacos 配置管理

目录 Nacos 配置统一管理 Nacos 配置热部署 Nacos 多环境配置共享 配置优先级 Nacos 配置统一管理 实例理解 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项此处我们将新增配置日期格式为 yyyy-MM-dd HH:mm:ss下图为新增 Nacos 配置统一管理…

Redis篇 String

String概念和set,get扩充 一. String类型的基本介绍二. String中set,get方法扩充 一. String类型的基本介绍 redis中所有的key都是字符串类型的,但是value的类型差异很大. redis中的字符串,直接就是二进制方式存储的,可以存储整数,二进制数据 文本数据,Json,xml还有音频等. 二.…