剑指offer——面试题20:表示数值的字符串

Posted acm-jing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer——面试题20:表示数值的字符串相关的知识,希望对你有一定的参考价值。

技术图片
 1 #include"iostream"
 2 using namespace std;
 3 
 4 bool IsInt(const char **str);
 5 bool IsUnsignInt(const char **str);
 6 
 7 bool IsNumeric(const char* str)
 8 {
 9     if(str==nullptr)
10         return false;
11     bool flagNumeric=IsInt(&str);//二阶指针才能保留更改
12 
13     if(*str==.)
14     {
15         str++;
16         flagNumeric=IsUnsignInt(&str)||flagNumeric;//要把flagNumeric放后面
17     }
18     if(*str==E||*str==e)
19     {
20         str++;
21         flagNumeric=flagNumeric&&IsInt(&str);
22     }
23     return flagNumeric&&*str==;
24 }
25 
26 bool IsInt(const char **str)//确保*str的内容不被修改
27 {
28     if(**str==+||**str==-)
29         (*str)++;
30     return IsUnsignInt(str);
31 }
32 
33 bool IsUnsignInt(const char **str)
34 {
35     int numLength=0;
36     while(**str!=&&**str>=0&&**str<=9)
37     {
38      //   cout<<**str;
39         (*str)++;
40         numLength++;
41     }
42  //   cout<<**str;
43     return numLength>0?true:false;
44 }
45 
46 // ====================测试代码====================
47 void Test(const char* testName, const char* str, bool expected)
48 {
49     if(testName != nullptr)
50         printf("%s begins: ", testName);
51 
52     if(IsNumeric(str) == expected)
53         printf("Passed.
");
54     else
55         printf("FAILED.
");
56 }
57 
58 
59 int main()
60 {
61     Test("Test1", "100", true);
62     Test("Test2", "123.45e+6", true);
63 
64     Test("Test3", "+500", true);
65     Test("Test4", "5e2", true);
66     Test("Test5", "3.1416", true);
67     Test("Test6", "600.", true);
68     Test("Test7", "-.123", true);
69     Test("Test8", "-1E-16", true);
70     Test("Test9", "1.79769313486232E+308", true);
71 
72     printf("

");
73 
74     Test("Test10", "12e", false);
75     Test("Test11", "1a3.14", false);
76     Test("Test12", "1+23", false);
77     Test("Test13", "1.2.3", false);
78     Test("Test14", "+-5", false);
79     Test("Test15", "12e+5.4", false);
80     Test("Test16", ".", false);
81     Test("Test17", ".e1", false);
82     Test("Test18", "e1", false);
83     Test("Test19", "+.", false);
84     Test("Test20", "", false);
85     Test("Test21", nullptr, false);
86 
87     return 0;
88 }
View Code

 

以上是关于剑指offer——面试题20:表示数值的字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer——面试题20:表示数值的字符串

剑指Offer-面试案例面试题66:把字符串转为整数

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

Java 剑指offer(20) 表示数值的字符串

剑指offer面试题 5. 替换空格

剑指offer字符串面试题 替换空格