【ARM 嵌入式 C 字符串系列 23.8 -- 判断一个字符串是否是数值字符串】


请阅读【嵌入式开发学习必备专栏 】


文章目录

    • 判断一个字符串是否是数值字符串

判断一个字符串是否是数值字符串

为了判断一个字符串是否是数值字符串,包括十进制和十六进制,可以实现一个函数is_numeric_string。在这个函数中,将遵循以下步骤:

  1. 首先,检查字符串是否为空。如果是,返回-1
  2. 然后,检查字符串的第一个字符。如果是'-''+',则跳过它,因为数值字符串可以是正数或负数。
  3. 对于十六进制数,字符串可能以"0x""0X"开始。如果检测到这个前缀,将验证其余字符是否都是有效的十六进制数字(0-9a-fA-F)。
  4. 如果没有检测到十六进制前缀,将验证字符串中的每个字符是否都是有效的十进制数字(0-9)。
    下面是根据上述步骤实现的is_numeric_string函数:
#include <stdio.h>
#include <string.h>
#include <ctype.h>// 函数声明
int is_numeric_string(char *s);int main(void) 
{// 测试函数printf("%d\n", is_numeric_string("12345"));       // 应该返回 0printf("%d\n", is_numeric_string("-12345"));      // 应该返回 0printf("%d\n", is_numeric_string("0x1A3E"));      // 应该返回 0printf("%d\n", is_numeric_string("0XABCDEF"));    // 应该返回 0printf("%d\n", is_numeric_string("123.456"));     // 应该返回 -1printf("%d\n", is_numeric_string("abcdef"));      // 应该返回 -1return 0;
}int is_numeric_string(char *s) 
{if (s == NULL || *s == '\0') return -1; // 检查空指针和空字符串// 跳过正负号if (*s == '+' || *s == '-') s++;// 检查十六进制前缀if (*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X')) {s += 2; // 跳过 "0x" 或 "0X"if (*s == '\0') return -1; // 如果只有"0x"或"0X",没有数字,则不是有效的数值字符串for (; *s; s++) {if (!isxdigit((unsigned char)*s)) return -1; // 检查是否是十六进制数字}} else {// 检查十进制数字for (; *s; s++) {if (!isdigit((unsigned char)*s)) return -1; // 检查是否是十进制数字}}return 0; // 是数值字符串
}

该函数通过检查字符串中的每个字符来确定它是否符合数值字符串的格式要求。如果字符串符合十进制或十六进制数值字符串的格式,函数返回0;否则返回-1

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

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

相关文章

LSTM实战笔记(部署到C++上)——更新中

前几天由于自己的个人原因停止了学习 接下里继续更新一些自己项目中所用到的神经网络等 ——————————————————————————————————————————— LSTM代码介绍 建立LSTM模型时需要设置一些参数&#xff0c;包括输入数据的形状、LSTM层的…

代码随想录35期Day31-Java

Day31题目 LeetCode455.分发饼干 核心思想&#xff1a;将两个数组排序&#xff0c;计算饼干遍历完能有几个大于需求的个数 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int i 0 ;int j 0;int count 0 ;while(i &l…

Array.from()详解

Array.from() 是 JavaScript 中的一个静态方法&#xff0c;用于从一个类似数组或可迭代对象&#xff08;如 Set, Map 的迭代器&#xff0c;或者字符串、类数组对象等&#xff09;创建一个新的、浅拷贝的数组实例。 语法 Array.from(arrayLike, [mapFunction, [thisArg]])arra…

数据分析师方差分析,单因素方差分析、多因素方差分析、协方差分析和重复测量方差分析,医学数据分析spss

单因素方差分析、多因素方差分析、协方差分析和重复测量方差分析在统计学中各有其特定的适用场景。 单因素方差分析&#xff08;One-way ANOVA&#xff09;&#xff1a;适用于检验单因素水平下的一个或多个独立因变量均值是否存在显著差异&#xff0c;即检验单因素各个水平的值…

锂电池SOH估计 | Matlab实现基于ALO-SVR模型的锂电池SOH估计

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池SOH估计 | Matlab实现基于ALO-SVR模型的锂电池SOH估计 蚁狮优化支持向量机锂电池健康状态SOH估计&#xff1b; 具体流程如下&#xff1b; 1、分析锂离子电池老化数据集&#xff0c;从中选取具有代表电池性能衰减…

dumpsys meminfo 流程中细节

源码基于&#xff1a;Android U 参考&#xff1a; dumpsys meminfo 详解(R) dumpsys meminfo 详解(U) 1. 命令入口 MemBinder frameworks/base/services/core/java/com/android/server/am/AMS.javastatic class MemBinder extends Binder {ActivityManagerService mActivity…

vue实现复制功能详解(使用v-clipboard)

目录 1 前言2 使用2.1 安装2.2 使用2.2.1复制静态的值2.2.2复制动态的变量2.2.3 在方法中使用2.2.4 复制成功失败事件 1 前言 v-clipboard 是一个与 Vue.js 相关的指令或功能&#xff0c;它通常与剪贴板操作结合使用。在 Vue.js 中&#xff0c;v-clipboard 可以用于将文本或其…

python 中如何匹配字符串

python 中如何匹配字符串&#xff1f; 1. re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match()就返回none。 import re line"this hdr-biz 123 model server 456" patternr"123" matchObj re.matc…

一键安装Halo DB

说明 这里说的一键其实分了好几步&#xff0c;是我将安装步骤分解。你可以把它们放在一个shell中或者串起来就是一键了。 易景科技的数据库 羲和 &#xff08;Halo DB&#xff09; 我之前的一位朋友&#xff08;章晨曦&#xff09;创立的数据库公司。以前看他朋友圈说他做数…

私域流量引流方式有哪些?

私域流量引流的方法无非是营销渠道投放、各平台KOL投放、自有自媒体平台账号内容引流、线下引流、老客户转介绍裂变等几个方面&#xff0c;下面对各种不同方法进行简单介绍。 1、营销渠道投放&#xff1a;选择广点通、粉丝通、某些app的信息流和dou等大平台自带的推广渠道工具…

音频文件分析-- whisper(python 文档解析提取)

使用whisper转文本&#xff0c;这里使用的是large-v3版本 pip install githttps://github.com/openai/whisper.git import whisper import os from tqdm import tqdmmodel whisper.load_model("large-v3")path "rag_data" for fi in tqdm(os.listdir(pa…

npy文件如何追加数据?

.npy 文件是 NumPy 库用于存储数组数据的二进制格式&#xff0c;它包含一个描述数组结构的头部信息和实际的数据部分。直接追加数据到现有的 .npy 文件并不像文本文件那样直接&#xff0c;因为需要手动修改文件头部以反映新增数据后的数组尺寸&#xff0c;并且要确保数据正确地…

创新指南|非凡时代的变革型领导力——五个领导力差异化优势将使高管能够重塑他们的组织

大多数商界领袖现在都明白&#xff0c;我们正在经历一场“伟大的重构”&#xff0c;整个行业、经济和社会都在重塑的时期。然而&#xff0c;考虑到他们面临的短期压力&#xff0c;很少有高管发现自己能够真正应对这些变化&#xff0c;这些变化对他们的组织所需的转型意味着什么…

智能BI产品设计

BI概念 目录 BI概念 一&#xff1a;与BI相关的几个重要概念 二&#xff1a;数据仓库 VS 数据库 BI架构 一&#xff1a;数据分析通用流程 二&#xff1a;BI平台基本架构 可视化图形 一&#xff1a;如何选择可视化图形 二&#xff1a;数据展示形式 三&#xff1a;数据…

JAVA学习14——异常

目录 异常&#xff1a; 1.异常基本介绍&#xff1a; 2.异常体系图&#xff1a; 3.五大运行时异常&#xff1a; &#xff08;1&#xff09;NullPointerException空指针异常&#xff1a; &#xff08;2&#xff09;AirthmetiException数字运算异常&#xff1a; &#xff0…

javaweb学习week7

javaweb学习 十四.Springboot 1.配置优先级 Springboot中支持三种格式的配置文件&#xff1a; 注意&#xff1a;虽然Springboot支持多种格式配置文件&#xff0c;但是在项目开发时&#xff0c;推荐使用一种格式的配置&#xff08;yml是主流&#xff09; Springboot除了支持…

报道|2024 INFORMS TSL-美团数据驱动研究竞赛

编者按 首届INFORMS 交通科学与物流&#xff08;Transportation Science & Logistics&#xff0c;TSL&#xff09;数据驱动研究竞赛与美团联合举行。 在第一届INFORMS TSL数据驱动研究挑战中&#xff0c;TSL和美团合作为全球研究人员和从业人员提供对美团运营级别的外卖配送…

C++:反向迭代器reverse_iterator

反向迭代器是C STL&#xff08;标准模板库&#xff09;中的一种迭代器类型&#xff0c;它允许我们逆向遍历容器&#xff08;如std::vector, std::list, std::deque等&#xff09;中的元素。反向迭代器指向容器的“尾部”元素&#xff0c;并通过递减操作向前移动&#xff08;即向…

Vscode 总是发现不到包package

Vscode 右下角&#xff0c;选择3.8.6就不再报错&#xff0c;其他最新版本的3.11.7就不行。

【设计模式】创建者模式之 工厂方法 抽象工厂

工厂方法模式(Factory Method) 一个特定功能&#xff0c;往往有多种实现方式&#xff0c;但是很难有某一个实现可以适用于所有情况&#xff0c;因此往往需要根据特定的场景选择不同的实现。试想&#xff1a;把选择具体实现的代码放在业务中会发生什么&#xff1f;每当我们需要…