测试用例1:

提取字符串中的数据:"-2022date:2022-08-21 10:20"

期望值:-2022 2022 8 21 10 20

测试用例2:

提取字符串中的数据:"-2022text:-20ABCD--21 -2022- -23 EF-24EF 2022-02-21 11:04:36"

期望值:-2022 -20 21 2022 -23 -24 2022 2 21 11 4 36

注意:当字符串中出现--20, -2022-,2022-08-21中的-21都不算作合法的负数。-20ABC,EF-22EF,-20等提取出的负数算作合法负数。

/**********************************************************************
 * 函数名:GetDecDigitFromString
 * 描述:从字符串中提取整数,包括正整数和负整数,但不能提取浮点数
 * 参数:
 * s:输入的字符串首地址
 * out:输出数据的首地址
 * maxNum:最多提取数据的个数
 ************************************************************************/

#include <stdio.h>
typedef unsigned int        WORD32;
typedef int                 SWORD32;
/*********************************************************************** 函数名:GetDecDigitFromString* 描述:从字符串中提取整数,包括正整数和负整数,但不能提取浮点数* 参数:* s:输入的字符串首地址* out:输出数据的首地址* maxNum:最多提取数据的个数* */
WORD32 GetDecDigitFromString(const char *s, SWORD32 *out, WORD32 maxNum)
{WORD32 idx = 0;const char *startPos = s;while(idx < maxNum && *s != '\0'){SWORD32 value = 0, isDigit = 0, sign = 1;while(*s != '\0'){if(*s >= '0' && *s <= '9'){value = value * 10 + (*s - '0');isDigit = 1;/*判断前一个字符是否是'-'且再前面一个字符不是数字或者'-',即剔除2022-08-21中的-21和--21*/if(((s - 1 == startPos && *startPos == '-') || *(s - 1) == '-')&& (*(s - 2) != '-' && (*(s - 2) < '0' || *(s - 2) > '9'))){sign = -1;}s++;}else if(isDigit){/* -2022-不符合负数,只提取2022 */if(*s == '-') sign = 1;startPos = s;s++;break;}else{s++;}}if(isDigit) *(out + idx++) = sign * value;}return idx;
}#define PrintfData(buf,len) \
do{\for(int i = 0; i < len;++i)\{\printf("%d ",buf[i]);\}\printf("\n");\
}while(0)void TestGetDecDigitFromString(void)
{// 测试值提取数值const char *s1 = "-2022date:2022-08-21 10:20";SWORD32 outDate[5] = {0};WORD32 num = GetDecDigitFromString(s1, outDate, 5);PrintfData(outDate, num);// 测试提取合适的负数const char *s2 = "-2022text:-20ABCD--21 -2022- -23 EF-24EF 2022-02-21 11:04:36";SWORD32 outFS[12] = {0};num = GetDecDigitFromString(s2, outFS, 12);PrintfData(outFS, num);
}int main(void)
{setvbuf(stdout,NULL,_IONBF,0);TestGetDecDigitFromString();return EXIT_SUCCESS;
}

测试结果:

-2022 2022 8 21 10 20 
-2022 -20 21 2022 -23 -24 2022 2 21 11 4 36

【C语言】从字符串中提取正整数和负整数相关推荐

  1. c语言实现字符串中提取数字,遇到非字符串则换行

    思路:将str里面的数字复制到deststr中,如果是非数字则赋值一个换行符 难点在于换行符添加后,deststr需要步进1,所以设置两个计数器strno和destno用于控制deststr何时步进

  2. R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符、str_sub函数指定起始位置和终止位置替换子字符串

    R语言str_sub函数从字符串中提取或替换子字符串(substring):str_sub函数指定起始位置和终止位置抽取子字符.str_sub函数指定起始位置和终止位置替换子字符串 目录

  3. 【R语言】正则表达式 从字符串中提取数字

    R语言 正则表达式 从字符串中提取数字 pattern <- "(?<ID>[0-9]+)" result <- regexpr(pattern= patt ...

  4. 从字符串中提取IP子串(C语言)

    1 目标 ① 从字符串中提取IP子串 ② 验证IP字符串是否合法(IPV4) 2 代码 ① ip地址提取 /*** @brief : IPv4地址提取* @param in_ip : 待提取字符串* ...

  5. 趣味编程:从字符串中提取信息(参考答案 - 上)

    这次"趣味编程"的目的是解析字符串,从一个指定模式的字符串中提取信息.对于目前这个问题,解决方案有很多种,例如直接拆分,使用正则表达式,或是如现在本文这般按照顺序解析.总结果上来说 ...

  6. java从字符串中提取数字

    1.做一下操作时会一般会用到提取数字操纵: a.列表中有翻页,当新添加的数据不是放在第一条或者最后一条时,需要翻页并循环找到对应的那条数据 b.当新添加的数据放在第一条或者最后一条时,则不需要翻页,只 ...

  7. 【转】SQL函数:字符串中提取数字,英文,中文,过滤重复字符

    SQL函数:字符串中提取数字,英文,中文,过滤重复字符 --提取数字 IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION DBO.GET_ ...

  8. 从html中提取手机号码,C#从字符串中提取电话号码、手机号码

    C#程序目的:从一堆字符串中提取电话号码.手机号码,要求字符串中的号码以非数字字符分割.原理:利用正则表达式提取纯数字字符串数组,然后利用长度等号码特征,筛选过滤. 代码: //思路仅供参考 //nu ...

  9. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  10. android字符串获取数字索引,从字符串中提取特定数据(Extract specific data from a string)...

    从字符串中提取特定数据(Extract specific data from a string) 我有一个带有描述的长字符串. 我想从字符串中提取一些信息. 但我无法弄明白该怎么做. 这是字符串: C ...

最新文章

  1. 【笔记】2010-11-25记录
  2. 科普|推荐系统常用算法总结
  3. 八种基本排序方式(插入排序,希尔排序,选择排序,冒泡排序,快速排序,堆排序,归并排序,基数排序)代码模板以及时间复杂度
  4. python 当前目录_virtualenvwrapper打造多版本Python环境
  5. win7上修改MySQL数据库密码
  6. 电脑html外链加密,WordPress 无需插件外链加密转内链
  7. (转)C#中的Abstract和Virtual函数区分,因我老弄不明白这个问题,所以转到这儿
  8. paip.android 读取docx总结
  9. Halcon 3D 1 读取3d数据
  10. MII/MDIO接口详解
  11. 可能是全网最全的解决无法创建视频捕捉过滤器问题?
  12. 如何获取Linux的主机名和域名?
  13. 用参数方程绘制椭球体
  14. STP配置 HSRP配置 端口追踪
  15. R语言基础图形绘制——箱线图
  16. [高通SDM450][Android9.0]CTA认证--拆分申请权限分组
  17. 2018年要过去了,年初说好要上完的网课呢?
  18. [Linux]命令查找一个文件
  19. 银河系创投徐芳:专注B2B这片热土,燃起产业新势能 | To B 50+
  20. 计算机毕业设计Java馥郁花艺网站mp4(源码+系统+mysql数据库+lw文档)

热门文章

  1. 使用Django创建一份在线简历
  2. 记一次用Python统计全国女性Size
  3. 有两个瓶子,一个瓶子是5升_隐藏的功能,装在瓶子中的消息和痴呆的面包师。...
  4. ANSYS APDL 绘制云图时出现错误“The Requested S data is not available. The PLNSOL command is ignored“的解决方法
  5. 德军总部2新巨人计算机丢失,德军总部2新巨人打不开怎么办 德军总部2新巨像进不去解决方法...
  6. vs2016 程序在vs2019 运行,显示无法找到 Intel C++ Compiler XE14.0解决方案
  7. 三维空间直角坐标系转换(2)——改进七参数小旋转角的局限
  8. Linux系统管理、系统安全命令概述
  9. 64位系统装32位计算机,64位电脑装32位系统,教您64位电脑怎么装32位系统
  10. 解决IDEA启动失败 Improperly specified VM option...问题