有限狀態機求解字串匹配問題
阿新 • • 發佈:2019-01-30
問題描述:
請實現一個函式用來判斷字串是否表示數值(包括整數和小數)。例如,字串"+100","5e2","-123","3.1416"和"-1E-16"都表示數值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
class Solution { public: char arr[10] = "+-n.ne+-n"; int turn[10][9] = { //+ - n . n e + - n {1, 1, 1, 0, 0, 0, 0, 0, 0}, // # start {0, 0, 1, 1, 0, 0, 0, 0, 0}, // + {0, 0, 1, 1, 0, 0, 0, 0, 0}, // - {0, 0, 1, 1, 0, 1, 0, 0, 0}, // n {0, 0, 0, 0, 1, 0, 0, 0, 0}, // . {0, 0, 0, 0, 1, 1, 0, 0, 0}, // n {0, 0, 0, 0, 0, 0, 1, 1, 1}, // e {0, 0, 0, 0, 0, 0, 0, 0, 1}, // + {0, 0, 0, 0, 0, 0, 0, 0, 1}, // - {0, 0, 0, 0, 0, 0, 0, 0, 1} // n }; bool isNumeric(char* string) { int cur = 0; for(int j, i = 0; string[i]; i++) { for(j = 0; j < 9; j++) { if(turn[cur][j]) { if(('0' <= string[i] && string[i] <= '9' && arr[j] == 'n') || (string[i] == 'E' && arr[j] == 'e')|| string[i] == arr[j]) { cur = j + 1; break; } } } if(j == 9) return false; } if(cur == 3 || cur == 4 || cur == 5 || cur == 9) return true; return false; } };