最优算法100例之30-表示数值的字符串

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章icon-default.png?t=N7T8https://blog.csdn.net/seeker1994/category_12585732.html

题目描述

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

题解报告

编译原理状态机

# include <iostream>
# include <string>
using namespace std;
bool IsNum(char ch){if(ch<'0'||ch>'9') return false;else return true;
}
bool isNumeric(char* str){int i = 0;if(!(str[i] == '+' || str[i] == '-' || IsNum(str[i])) )return false;else{i++;while(IsNum(str[i]) && str[i] != '\0')i++; //如果是数字一直往后找if(str[i] == '\0'){return true;} else if(str[i] == '.'){i++;if(str[i] == '\0')return true;else if(IsNum(str[i])){while(str[++i]!='\0' && IsNum(str[i]));if(str[i]=='e'||str[i]=='E'){i++;if(str[i]=='+' || str[i]=='-' || IsNum(str[i])){while(str[++i]!='\0' && IsNum(str[i]));if(str[i]=='\0')return true;elsereturn false;}elsereturn false;}else if(str[i]=='\0'){return true;}else{return false;}		}else{return false;}}else if(str[i]=='e'||str[i]=='E'){i++;if(str[i]=='+' || str[i]=='-' || IsNum(str[i])){while(str[++i]!='\0' && IsNum(str[i]));if(str[i]=='\0') return true;else return false;}else return false;}	else{return false; }	         }
}
int main(){char str[] = "1.25";if(isNumeric(str)){cout<<"YES"<<endl; }else{cout<<"NO"<<endl;}return 0;
}
优化后的代码,使用状态表:
# include <iostream>
# include <string>
using namespace std;
char arr[10] = "+-n.ne+-n";
int turn[10][9] = {//+  -  n  .  n  e  +  -  n{1, 1, 1, 0, 0, 0, 0, 0, 0},    // # start{0, 0, 1, 1, 0, 0, 0, 0, 0},    // +{0, 0, 1, 1, 0, 0, 0, 0, 0},    // -{0, 0, 1, 1, 0, 1, 0, 0, 0},    // n{0, 0, 0, 0, 1, 0, 0, 0, 0},    // .{0, 0, 0, 0, 1, 1, 0, 0, 0},    // n{0, 0, 0, 0, 0, 0, 1, 1, 1},    // e{0, 0, 0, 0, 0, 0, 0, 0, 1},    // +{0, 0, 0, 0, 0, 0, 0, 0, 1},    // -{0, 0, 0, 0, 0, 0, 0, 0, 1}     // n
};
bool isNumeric(char* string) {int cur = 0,i,j;for(i = 0; string[i]; i++) {for(j = 0; j < 9; j++) {if(turn[cur][j]) {//状态转移 //状态转移 if(('0' <= string[i] && string[i] <= '9' && arr[j] == 'n') ||(string[i] == 'E' && arr[j] == 'e') ||string[i] == arr[j]) {cur = j + 1;break;}}}if(j == 9)return false;}if(cur == 3 || cur == 4 || cur == 5 || cur == 9)return true;return false;
}
int main(){char str[] = "1.25";if(isNumeric(str)){cout<<"YES"<<endl; }else{cout<<"NO"<<endl;}return 0;
}#1正则
public boolean isNumeric(char[] str) {String string = String.valueOf(str);return string.matches("[\\+-]?[0-9]*(\\.[0-9]*)?([eE][\\+-]?[0-9]+)?");
}
//标记法
bool isNumeric(char* str) {// 标记符号、小数点、e是否出现过bool sign = false, decimal = false, hasE = false;for (int i = 0; i < strlen(str); i++) {if (str[i] == 'e' || str[i] == 'E') {if (i == strlen(str)-1) return false; // e后面一定要接数字if (hasE) return false;  // 不能同时存在两个ehasE = true;} else if (str[i] == '+' || str[i] == '-') {// 第二次出现+-符号,则必须紧接在e之后if (sign && str[i-1] != 'e' && str[i-1] != 'E') return false;// 第一次出现+-符号,且不是在字符串开头,则也必须紧接在e之后if (!sign && i > 0 && str[i-1] != 'e' && str[i-1] != 'E') return false;sign = true;} else if (str[i] == '.') {// e后面不能接小数点,小数点不能出现两次if (hasE || decimal) return false;decimal = true;} else if (str[i] < '0' || str[i] > '9') //不合法字符return false;}return true;
}

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

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

相关文章

基于ArrayList实现简单洗牌

前言 在之前的那篇文章中&#xff0c;我们已经认识了顺序表—>http://t.csdnimg.cn/2I3fE 基于此&#xff0c;便好理解ArrayList和后面的洗牌游戏了。 什么是ArrayList? ArrayList底层是一段连续的空间&#xff0c;并且可以动态扩容&#xff0c;是一个动态类型的顺序表&…

Java方法的参数传递机制与递归总结

文章目录 1、方法的参数传递机制1.1、形参和实参1.2、 参数传递机制&#xff1a;值传递1.3、 举例1.4 练习 2、 递归(recursion)方法 1、方法的参数传递机制 1.1、形参和实参 若方法含有参数&#xff1a; 形参&#xff08;formal parameter&#xff09;&#xff1a;在定义方…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

BIM转Power BI数据集

在本博客中&#xff0c;我们将了解如何使用从 SSAS 表格、Power BI Desktop 或 Power BI 服务数据集中提取的 Model.bim 文件在本地或 PBI 服务上生成新数据集。 1、设置&#xff08;SSAS 表格和 PBI 服务通用&#xff09; 我建议你创建一个专门用于此任务的新 Python 环境&a…

old photo老照片图像复原数据集

来源 本来想拿DA-CLIP 训练一下old photo&#xff0c;训练代码没成功&#xff0c;毕设没时间就不研究了 github搜old photo复原论文原作者好像没开源训练数据集&#xff0c;所以用了这个SynOld 训练集500对测试集200对 但是readme写的很差&#xff0c;其他什么也没交代 展示…

Centos-Linux安装部署MySQL-8.0

linux搭建mysql 1.使用系统的root账户 2.切换到 /usr/local 目录下 3.下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz也可以直接在官方下载最新版本 官方下载 选择linux 4.解压mysql tar xvJf mysql-8.0.21-l…

C易错注意之const修饰指针,含char类型计算,位段及相关经典易错例题

目录 前言 一&#xff1a;const修饰指针 1.const修饰变量 2.const 修饰指针 1.const int*p&m; 2. int* const p&m; 3. int const *p&m; 4. int const *const p&m; 5.总结 总之一句话为&#xff1a;左定值有定向 二&#xff1a;关于计算中char类型…

C语言:动态内存管理(二)

目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…

杨氏矩阵(C语言)

文章目录 问题技术名词解释思路关键代码运行代码 问题 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 技术名词解释 杨氏矩阵&…

自动化测试框架Robot Framework入门

什么是RF RF是一个基于 Python 的、可扩展的关键字驱动的自动化 验收测试框架、验收测试驱动开发 &#xff08;ATDD&#xff09;、 行为驱动开发 &#xff08;BDD&#xff09; 和机器人流程自动化 &#xff08;RPA&#xff09;。它 可用于分布式、异构环境&#xff0c;其中自动…

Spring Security——04,认证_校验

认证_校验 一、认证过滤器二、配置过滤器三、测试过滤器3.1 登录接口3.2 非登录接口3.3 结果 一键三连有没有捏~~ 一、认证过滤器 创建一个filter包&#xff0c;创建一个过滤器 代码如下&#xff1a; Component public class JwtAuthenticationTokenFilter extends OncePerR…

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用&#xff0c;显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

mysql 运算符 语句 字符集 校队集

mysql 运算符 使用select语句可以输出运算的结果 mysql标识符不区分大小写 算数运算符 1./除法 得到的结果是一个小数 %是整数,省略小数 2、除以0不会报错,得到的结果是 null 3.数宇和字符串做加法运算,并不会拼接 比较运算符 1.mysql里面的=是比较运算符,而不是赋值运算…

lora pingpang系统 4

1 深入了解LoRa技术原理 1.1 LoRa扩频通信原理 1.1.1 模拟无线通信&#xff1a; 模拟无线通信是一种使用模拟信号传输数据的通信方式。这种通信方式已经被数字无线通信所取代&#xff0c;因为数字通信具有更高的效率和可靠性。 天线&#xff1a;从空中接收到的无线电波转换成…

数据结构——图的概念,图的存储结构,图的遍历(dfs,bfs)

目录 1.图的定义和术语 2.案例引入 1.六度空间理论 3.图的类型定义 4.图的存储结构 1.邻接矩阵 1.无向图的邻接矩阵表示法 2.有向图的邻接矩阵表示法 3.网&#xff08;有权图&#xff09;的邻接矩阵表示法 代码示例&#xff1a; 2.采用邻接矩阵表示法创建无向图…

MySQL 表的增删改查

文章目录 一、什么是CRUD&#xff1f;二、新增&#xff08;Create&#xff09;1、单行数据 全列插入2、多行数据 指定列插入3、插入特殊类型 三、查询&#xff08;Retrieve&#xff09;1、全列查询2、指定列查询3、表达式查询4、指定别名5、去重6、排序7、条件查询基本查询&a…

java算法day44 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包理论基础 完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 体现在代码中就是对背包的遍历顺序不同。01背包是逆序遍历背包&#xff0c;完全背包是顺序遍历背包。 518. 零钱兑换 II class Solution {public int change(int amount, int[] coin…

IMAP的要点:旅行前需要了解的内容

你是否经常因会议而出差&#xff0c;需要在各种设备上灵活地访问你的电子邮件&#xff1f;如果是的话&#xff0c;你可能会想了解你的电子邮件系统是如何通过使用互联网消息访问协议&#xff08;IMAP&#xff09;来工作的&#xff0c;这样当你不在办公桌前时&#xff0c;你可以…

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …

SpringCloud - 如何本地调试不会注册到线上环境(Nacos)?

问题描述 有时候我们需要本地调试注册到 Nacos 上&#xff0c;但是会影响线上服务的 Feign 请求打到本地导致不通影响了线上业务。 原因分析 一般最传统的解决方案就是修改本地 bootstrap.yml 的 spring.cloud.nacos.discovery.namespace spring:application:name: app-serv…