专业素材网站,古塔网站建设,网站标题优化怎么做,网站怎么做舆情监测题目#xff1a; 请实现一个函数用来判断字符串是否表示数值#xff08;包括整数和小数#xff09;。例如#xff0c;字符串100,5e2,-123,3.1416和-1E-16都表示数值。 但是12e,1a3.14 请实现一个函数用来判断字符串是否表示数值包括整数和小数。例如字符串100,5e2,-123,3.1416和-1E-16都表示数值。 但是12e,1a3.14,1.2.3,-5和12e4.3都不是。 思路 表示数值的字符串遵循如下模式: [sign]integral-digits[.[fractional-digit]][e|E[sign]exponential-digits] 说明一下在数值之前可能有正负符号‘-’接下来是若干0-9的数位表示数值的整数部分在某些小数里可能没有整数部分。如果数值是一个小数那么在小数点后面可能会有若干0到9的数位表示数值的小数部分如果数值用科学计数法表示接下来是一个‘e’或‘E’以及紧跟着一个整数可以有正负号表示指数。 判断一个字符串是否满足上述模式首先看第一个字符是否为正负符号如果是在字符串往前移动一个字符继续扫描字符串剩下中0-9的位数如果是一个小数则将遇到小数点如果是科学计数法在整数或者小数后面可能会遇到‘e’或‘E’. 代码 #include iostream
#include string.husing namespace std;void scanDigits(char** string){while(**string!\0 **string0 **string9)(*string);
}bool isExponential(char** string){if(**string!e **string!E)return false;(*string);if(**string || **string-)(*string);if(**string\0)return false;scanDigits(string);return (**string\0)?true:false;
}bool isNumeric(char* string){if(stringNULL)return false;if(*string || *string-)string;if(*string\0)return false;bool numerictrue;scanDigits(string);if(*string!\0){if(*string.){string;scanDigits(string);if(*stringe || *stringE)numericisExponential(string);}else if(*stringe || *stringE)numericisExponential(string);elsenumericfalse;}return numeric *string\0;
}int main()
{cout isNumeric(5e2) endl;cout isNumeric(12e) endl;cout isNumeric(1a3.14) endl;cout isNumeric(-5) endl;return 0;
} 在线测试OJ http://www.nowcoder.com/books/coding-interviews/6f8c901d091949a5837e24bb82a731f2?rp3 AC代码 class Solution {
public:bool isNumeric(char* string){if(stringNULL)return false;int lenstrlen(string);int index0;if(string[index] || string[index]-)index;if(indexlen)return false;bool numerictrue;scanDigit(string,index);if(indexlen){if(string[index].){index;scanDigit(string,index);if(indexlen)numerictrue;else if(string[index]e || string[index]E)numericisExponential(string,index);elsenumericfalse;}else if(string[index]e || string[index]E)numericisExponential(string,index);elsenumericfalse;}return numeric; }void scanDigit(char* string,int index){while(string[index]!\0 string[index]0 string[index]9)index;}bool isExponential(char* string,int index){if(string[index]!e string[index]!E)return false;index;if(string[index] || string[index]-)index;if(string[index]\0)return false;scanDigit(string,index);return (string[index]\0)?true:false;}};转载于:https://www.cnblogs.com/AndyJee/p/4700611.html