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

ops/2024/9/23 0:03:11/


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


文章目录

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

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

为了判断一个字符串是否是数值字符串,包括十进制和十六进制,可以实现一个函数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.ppmy.cn/ops/35323.html

相关文章

Linux 磁盘管理命令df du dd

文章目录 3.Linux 磁盘管理命令3.1 df&#xff1a;显示报告文件系统磁盘使用信息案例练习 3.2 du&#xff1a;显示目录或者文件所占的磁盘空间案例练习 3.3 dd&#xff1a;磁盘操作案例练习 3.Linux 磁盘管理命令 3.1 df&#xff1a;显示报告文件系统磁盘使用信息 作用&#x…

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

1. Spring6 当中 Bean 的生命周期的详细解析&#xff1a;有五步&#xff0c;有七步&#xff0c;有十步 文章目录 1. Spring6 当中 Bean 的生命周期的详细解析&#xff1a;有五步&#xff0c;有七步&#xff0c;有十步每博一文案1.1 什么是 Bean 的生命周期1.2 Bean 的生命周期 …

pytest教程-37-钩子函数-pytest_collection_finish

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_collection_start钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_collection_finish钩子函数的使用方法。 pytest_collection_finish(session) 是一个 pytest 钩子函数&…

AI工具如何改变我们的工作与生活

AI工具在当今社会中扮演着越来越重要的角色&#xff0c;它们已经开始改变着我们的工作方式和生活方式。在接下来的2000字篇幅中&#xff0c;我将详细探讨AI工具如何影响我们的工作和生活。 AI工具在工作中的影响&#xff1a; 自动化和智能化生产流程&#xff1a; AI工具可以通…

鸿蒙应用开发系列 EX篇:HarmonyOS应用开发者基础认证

文章目录 系列文章背景认证考试题库参考注意:题库会不定时的进行具备调整甚至整体轮换,此为2024.5月版本注意:题库中题目的选项每次都会随机顺序,请参考内容判断题单选题多选题系列文章 鸿蒙应用开发系列 篇一:鸿蒙系统概述 鸿蒙应用开发系列 篇二:鸿蒙系统开发工具与环…

redis stream 作为消息队列的最详细的命令说明文档

简介 stream 作为消息队列&#xff0c;支持多次消费&#xff0c;重复消费&#xff0c;ack机制&#xff0c;消息异常处理机制。 涉及到以下几个概念&#xff0c;消息流&#xff0c;消费者组&#xff0c;消费者。 涉及到以下命令 # 添加消息到流中 XADD key [NOMKSTREAM] [&…

第二章数据处理伦理练习

单选题 (每题1分,共12道题) 1、 [单选] 以下哪种活动中,混淆是不足以保护数据的? A:数据共享 B:数据转换 C:数据脱敏 D:以上都正确 2、 [单选] 定义雇员如何理解现有做法在建立和维护客户、合伙人和其他利益相关方之间信任方面的伦理影响,属于建立数据伦理文化的哪…

Linux网络-部署YUM仓库及NFS共享服务

目录 一.YUM仓库服务 1.YUM概述 1.1.YUM&#xff08;Yellow dog Updater Modified&#xff09; 2.准备安装源 2.1.软件仓库的提供方式 2.2.RPM软件包的来源 2.3.构建CentOS 7 软件仓库 2.4.在软件仓库中加入非官方RPM包组 3.一键安装软件包的工具&#xff1a; 好处&a…