【剑指Offer】面试题54:表示数值的字符串
来源:互联网 发布:php artisan 安装 编辑:程序博客网 时间:2024/06/07 09:36
一:题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
二:解题思路
把一个数字记为a×10^n的形式(1≤|a|<10,n为整数),这种记数法叫做科学记数法
三:代码实现
class Solution {public: bool isNumeric(char* string) {if(string==NULL || string=="") //如果字符串为空,则返回false return false; if(*string=='+' || *string =='-')//如果第一位为符号位,则继续遍历字符串 string++; if(*string=='\0') //如果只有一个符号位,返回false return false; bool numeric=true; //true:字符串是一个数值 scanDigits(string); if(*string!='\0'){ //如果是个小数 if(*string=='.'){ string++;//越过小数点 scanDigits(string);//判断小数点后的字符 if(*string=='e' || *string=='E') numeric=isExponential(string); } //如果是整数 else if(*string=='e' || *string=='E') numeric=isExponential(string); else numeric=false; } return numeric && *string=='\0'; }//扫描字符串,直到不是数字为止void scanDigits(char* &string){ while(*string!='\0' && *string>='0' && *string<='9') string++; } //问题:没有检查E/e前面是否有数字 bool isExponential(char* &string){ if(*string!='e' && *string!='E') return false; string++; if(*string=='+' || *string=='-')//如果E/e后接的是+-号 string++; if(*string=='\0') //E/e后必须有数字或+—数字 return false; scanDigits(string); return (*string=='\0')?true:false; } };
存在的问题:没有判断E/e前是否有数字,以及数字是否合理
int main(){char* str = "0.0000";cout << str<<""<<isNumeric(str) << endl;char* str1 = "0.13e-10";cout << str1 << "" << isNumeric(str1) << endl;char* str2 = "-.0098";cout << str2 << "" << isNumeric(str2) << endl;char* str3 = "-e128";cout << str3 << "" << isNumeric(str3) << endl;char* str4 = "-e+";cout << str4 << "" << isNumeric(str4) << endl;char* str5 = "-0000e+0000";cout << str5 << "" << isNumeric(str5) << endl;system("pause");return 0;}
结果(1:true):
0.0000 1
0.13e-10 1
-.0098 1
-e128 1
-e+ 0
-0000e+0000 1
请按任意键继续. . .
网友的结果
bool isNumeric(char* string){int len = strlen(string);int i = 0, dot = 0, nume = 0, num = 0;if (len == 0)return true;if (string[0] == '+' || string[0] == '-')i++;while (i<len){if (string[i] >= '0'&&string[i] <= '9'){i++;num = 1;}else if (string[i] == '.'){if (nume>0)return false;dot++;i++;}else if (string[i] == 'e' || string[i] == 'E'){if (nume>0 || num == 0)return false;nume++;i++;if (string[i] == '-' || string[i] == '+')i++;if (string[i] == '\0')return false;}elsereturn false;}if (dot>1 || nume>1)return false;return true;}
int main(){char* str = "0.0000";cout << str<<""<<isNumeric(str) << endl;char* str1 = "0.13e-10";cout << str1 << "" << isNumeric(str1) << endl;char* str2 = "-.0098";cout << str2 << "" << isNumeric(str2) << endl;char* str3 = "-e128";cout << str3 << "" << isNumeric(str3) << endl;char* str4 = "-e+";cout << str4 << "" << isNumeric(str4) << endl;char* str5 = "-0000e+0000";cout << str5 << "" << isNumeric(str5) << endl;system("pause");return 0;}
结果:
0.0000 1
0.13e-10 1
-.0098 1
-e128 0
-e+ 0
-0000e+0000 1
请按任意键继续. . .
阅读全文
0 0
- 【剑指Offer学习】【面试题54:表示数值的字符串】
- 剑指offer-面试题54:表示数值的字符串
- 剑指offer--面试题54:表示数值的字符串
- 剑指Offer面试题54:表示数值的字符串
- 剑指offer-面试题54-表示数值的字符串
- 【剑指Offer】面试题54:表示数值的字符串
- 剑指offer面试题[54]-表示数值的字符串
- 剑指offer--面试题20:表示数值的字符串
- 【剑指offer】面试题20:表示数值的字符串
- 《剑指Offer》学习笔记--面试题54:表示数值的字符串
- 剑指offer——面试题54:表示数值的字符串
- 面试题54:表示数值的字符串
- 面试题54:表示数值的字符串
- 面试题54:表示数值的字符串
- 剑指Offer 面试题20:表示数值的字符串 Java代码实现
- 剑指offer 54-表示数值的字符串
- 《剑指offer》:[54]表示数值的字符串
- 面试题62:表示数值的字符串
- 理解Android进程创建流程
- javscript之执行环境和作用域
- LeetCode-217. Contains Duplicate (Java)
- Spark combinebykey使用示例
- Android studio关于 找不到arr文件的问题
- 【剑指Offer】面试题54:表示数值的字符串
- mixin
- Java VisualVM插件下载地址
- Ubuntu下加大tomcat内存
- json数组
- 5.7-全栈Java笔记:字符串String的常用方法
- ptyhon 类的继承和定制类
- node
- java递归实现两个小例子