返回数值类型
2011-01-03 22:38
127 查看
代码
/////////////////////////////////////////////////////////////////////////////////////////// // This program can determin very accurately the nature of the user input, // it detects whether it is an integer, a float, a number in scientific notation // or simply an invalid input. To be capable of doing this the program uses a simple FSM // (FINITE STATE MACHINE) to represent the possible states of the input.( INT, FLOAT,.. ) // author: Gonzales Cenelia /////////////////////////////////////////////////////////////////////////////////////////// #include <iostream> using std::cin; using std::endl; using std::cout; //=========================================================================== // the list of all the possible states for the current FSM //=========================================================================== enum STATE{ START, INT, FLOAT, SCIENTIFIC, EXPONENT, S1, S2, INVALID } state; STATE Transition( char *str ); void PrintState( STATE state ); int main() { // declaring buffer variable char buffer[32] = {0}; // geting input from the user cout << "\nPlease enter a number: "; cin.getline( buffer, 32 ); // compute final state STATE FINAL_STATE = Transition(buffer); // prints the final state PrintState(FINAL_STATE); return 0; } //================================================ // makes the transition from one state to another //================================================ STATE Transition( char *str ) { int NEXT_SYMBOL; for( ; *str && state != INVALID; str++ ) { NEXT_SYMBOL = *str; switch(state) { case START: if(isdigit(NEXT_SYMBOL)) { state = INT; } else if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) { state = S1; } else if( NEXT_SYMBOL == '.' ) { state = FLOAT; } else { state = INVALID; } break; case S1: if(isdigit(NEXT_SYMBOL)) { state = INT; } else if( NEXT_SYMBOL == '.' ) { state = FLOAT; } else if(!isdigit(NEXT_SYMBOL)) { state = INVALID; } break; case INT: if( NEXT_SYMBOL == '.' ) { state = FLOAT; } else if(!isdigit(NEXT_SYMBOL)) { state = INVALID; } break; case FLOAT: if( NEXT_SYMBOL == 'E' || NEXT_SYMBOL == 'e' ) { state = S2; } else if(!isdigit(NEXT_SYMBOL)) { state = INVALID; } break; case S2: if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) { state = EXPONENT; } else { state = INVALID; } break; case EXPONENT: if(isdigit(NEXT_SYMBOL)) { state = SCIENTIFIC; } else { state = INVALID; } break; case SCIENTIFIC: if(!isdigit(NEXT_SYMBOL)) { state = INVALID; } break; } } return state; } //===================================== // prints the current state of the FSM //===================================== void PrintState( STATE state ) { cout << "\nFSM state: "; switch(state) { case INT: cout << "INT "; break; case FLOAT: cout << "FLOAT "; break; case SCIENTIFIC: cout << "SCIENTIFIC "; break; case INVALID: cout << "INVALID "; break; } }
相关文章推荐
- mysql tinyint类型返回如何返回数值
- setInterval的返回值类型为什么为数值?
- python不同数值(适用于整型的内建函数)类型返回,二进制,八进制otc.
- Python 2.X-关于函数返回的数值类型
- java中调用oracle procedure或者function返回类型的问题
- Android 通过jni返回Mat数据类型
- POI读取excel单元格,获取单元格各类型值,返回字符串类型
- WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
- 传入a,b两个int类型的变量,返回两个值的最大公约数
- postgreSQL数据类型转换字符串和数值
- SQL插入语句中有单引号 && SQL中char nchar varchar nvarchar的区别 && Java中字符(串)和数值类型的转换
- LinQ 定义带有返回类型的扩展方法3.2
- Java中数值较大的double类型转换为字符串时会用科学计数法显示的解决办法
- getElementsByClassName("class")[i]返回的类型
- 极限研究-"&amp;"函数返回引用与返回普通类型的区别
- Java返回类型泛型的用法小结
- 无参函数,有参函数,有返回值类型
- net:不同类型的数值,不能乱比。即使强制类型转换了也不好使!
- mybatis 返回基本类型
- *& 连用,用于返回类型