关于合法浮点数、转义字符、八进制、十六进制、字符常量的判断

您所在的位置:网站首页 转义字符十六进制小写x 关于合法浮点数、转义字符、八进制、十六进制、字符常量的判断

关于合法浮点数、转义字符、八进制、十六进制、字符常量的判断

2024-05-09 11:59| 来源: 网络整理| 查看: 265

只针对C语言中定义

文章目录 只针对C语言中定义浮点数输入自动判断是否合法 转义字符八进制/十六进制字符常量

浮点数

定义: 浮点数是指一个数的小数点的位置不是固定的,而可以浮动。实数的指数形式称为浮点数.

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

浮点型数据是用来表示具有小数点的实数的. 在C语言中, 实数是以指数形式存放在存储单元中的 .

易错点

小数点前或后缺少数字的,也是合法浮点数. 比如: 0.0、.0、0.但是前后都缺了,只有一个. , 不是合法的浮点数.指数形式写作小写e与大写E都合法.不区分大小写.e之前和之后必须有数字(不限制正负), 比如 12e,e12 不合法.,但是12e0合法.且e之后的数字必须为整数. 比如: 12e3.14 不合法1000.0与1e3 都是合法的浮点数 .3.e-0 , .3e0 都是合法的但是2e.4 , 2e-4. 不合法 输入自动判断是否合法

来自LeetCode第65题: https://leetcode.cn/problems/valid-number/

public boolean isNumber1(String s) { // 直接正则表达式 return s.matches("^[+-]?((\\d+)|(\\d+\\.\\d*)|(\\d*\\.\\d+))([eE][+-]?\\d+)?$"); }

或者

List PlusMinus = new ArrayList(Arrays.asList('+', '-')); public boolean isNumber(String s) { // 1. 纯数字 if (isPureNumber(s)) return true; // 2. 小数点 if (isDecimalPoint(s)) return true; // 3. e/E if (isScientificCM(s)) return true; return false; } /** * 判断是否可直接转为数字, 即是否全部为数字 * * @param s * @return */ boolean isPureNumber(String s) { if (PlusMinus.indexOf(s.charAt(0)) != -1) { s = s.substring(1); } boolean haveNum = false; for (char c : s.toCharArray()) { if (!Character.isDigit(c)) { return false; } else { haveNum = true; } } return haveNum; /* 超界会返回false ,eg:016912630333 try { Integer.parseInt(s); return true; } catch (NumberFormatException e) { return false; }*/ } /** * 是否合法带小数点 * * @param s * @return */ boolean isDecimalPoint(String s) { if (PlusMinus.indexOf(s.charAt(0)) != -1) { s = s.substring(1); } int count = 0; boolean haveNum = false; for (char c : s.toCharArray()) { if (c == '.') { if (++count > 1) return false; } else if (!Character.isDigit(c)) { return false; } else { haveNum = true; } } return haveNum; } boolean isScientificCM(String s) { s = s.toUpperCase(); int count = 0; for (int i = 0; i 1 || i == 0 || i == s.length() - 1) return false; } else if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != '.' && PlusMinus.indexOf(s.charAt(i)) == -1) { return false; } } // 如果没有E if (count == 0) return false; String[] es = s.split("E"); // 第一部分是否合法 boolean part1 = isPureNumber(es[0]) || isDecimalPoint(es[0]); // 第二部分是否合法 boolean part2 = isPureNumber(es[1]); return part1 && part2; } 转义字符

百科: 在这里插入图片描述在这里插入图片描述

必须必须带有转义符反斜杠\只有一个反斜杠的\不合法在\1011 中1011是八进制形式, 不是二进制,不是十进制,换算后十进制为 521 , 已超出ASCLL码最大值128 , 不合法在\xf , 以x开头表示以十六进制表示的,转换为十进制为 15. 合法 .\abc , \} , \\0 待定, 编译器不报错,但是会警告. 个人觉得不合法.也有认为\abc合法的.(表示先响铃(\a),再是字符bc)注意: \f与 \xf 都合法.但是 \n 合法, \xn 不合法,因为十六进制最大值为f,即15 八进制/十六进制 八进制以0开头标志,比如: 012,表示八进制数12, 也可表示为000012十六进制以0x或0X开头标识, 比如: 0xab ,但是不可表示为000000xab十六进制不区分大小写,0xab也可表示为0XAB0x5e2属于合法十六进制数.但是只有一个0x不合法. 字符常量 所有字符均以单引号' '包裹, 所有以双引号" "包裹的都是字符串.

脑壳大…



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3