zoukankan      html  css  js  c++  java
  • 返回数值类型

    代码
    ///////////////////////////////////////////////////////////////////////////////////////////
    // 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;
    }
    }







  • 相关阅读:
    第 9 章 完成购物车
    新建 ASP.NET MVC 项目快速代码
    一个真正的应用程序(第7~8章)(所需代码在下一篇随笔里)
    HTML
    squid 高匿设置
    Linux操作系统上ADSL拨号上网的方法详解
    MYSQL-max_binlog_cache_size参数
    mysql查杀会话
    centos配置Tomcat以指定的身份(非root)运行
    mysql load data导入脚本
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/1925039.html
Copyright © 2011-2022 走看看