剑指offer 54-表示数值的字符串

来源:互联网 发布:淘宝手机兼职怎么做 编辑:程序博客网 时间:2024/05/29 05:52

题目描述

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


#include<iostream>using namespace std;void scanDigits(char **str){while(*str!=NULL  && **str>='0' && **str<='9')(*str)++;}bool isExponential(char **str){if(**str!='e' && **str!='E')return false;(*str)++;if(**str=='+' || **str=='-')(*str)++;if(**str=='\0')return false;scanDigits(str);return (**str=='\0')?true:false;}bool isNumeric(char *str){if(str == NULL)return false;if(*str=='+' || *str=='-')str++;if(*str=='\0')return false;bool numeric = true;scanDigits(&str);if(*str!='\0'){if(*str=='.'){++str;scanDigits(&str);if(*str=='e' || *str=='E'){numeric = isExponential(&str);}}else if(*str=='e' || *str=='E'){numeric = isExponential(&str);}elsenumeric == false;}return numeric && (*str=='\0'); }void Test(char* testName, char* string, bool expected){    if(testName != NULL)        printf("%s begins: ", testName);    if(isNumeric(string) == expected)        printf("Passed.\n");    else        printf("FAILED.\n");}int main(int argc, char* argv[]){    Test("Test1", "100", true);    Test("Test2", "123.45e+6", true);    Test("Test3", "+500", true);    Test("Test4", "5e2", true);    Test("Test5", "3.1416", true);    Test("Test6", "600.", true);    Test("Test7", "-.123", true);    Test("Test8", "-1E-16", true);    Test("Test9", "1.79769313486232E+308", true);    printf("\n\n");    Test("Test10", "12e", false);    Test("Test11", "1a3.14", false);    Test("Test12", "1+23", false);    Test("Test13", "1.2.3", false);    Test("Test14", "+-5", false);    Test("Test15", "12e+5.4", false);return 0;}


0 0
原创粉丝点击