getnum.cpp

来自「这是一个实数分析程序」· C++ 代码 · 共 105 行

CPP
105
字号
#include <iostream>
#include <ctype.h>
#include <stdlib.h>
#include <string>
using namespace std;
const int MAXSIZE = 20;
enum state{ s0, s1, s2, s3, s4, s5, s6, s7};
char accept[MAXSIZE];
int index = 0;
char * check(){
    index = 0;
    state sta = s0;
    char c;
    while(c = getchar()){
        if(sta == s0){
            if(isdigit(c)){
                sta = s1; accept[index++] = c;
            }else if(c == '+' || c == '-'){
                sta = s2; accept[index++] = c;
            }else if(c == '.'){
                sta = s3; accept[index++] = c;
            }else{
                sta = s0; cout<<"syntax error"<<endl;
                break;
            }
        }else if(sta == s1){
            if(isdigit(c)){
                sta = s1; accept[index++] = c;
            }else if(c == 'E'){
                sta = s5; accept[index++] = c;
            }else if(c == '.'){
                sta = s4; accept[index++] = c;
            }else{
                sta = s0; //ungetchar(c);
                break;
            }
        }else if(sta == s2){
            if(isdigit(c)){
                sta = s1; accept[index++] = c;
            }else if(c == '.'){
                sta = s3; accept[index++] = c;
            }else{
                sta = s0; cout<<"syntax error"<<endl;
                break;
            }

        }else if(sta == s3){
            if(isdigit(c)){
                sta = s4; accept[index++] = c;
            }else{
                sta = s0; cout<<"syntax error"<<endl;
                break;
            }
        }else if(sta == s4){
            if(toupper(c) == 'E'){
                sta = s5; accept[index++] = c;
            }else if(isdigit(c)){
                sta = s4; accept[index++] = c;
            }else{
                sta = s0; //ungetchar(c);
                break;
            }

        }else if(sta == s5){
            if(isdigit(c)){
                sta = s7; accept[index++] = c;                
            }else if(c == '+' || c == '-'){
                sta = s6; accept[index++] = c;
            }else{
                sta = s0; cout<<"syntax error"<<endl;
                break;
            }
        }else if(sta == s6){
            if(isdigit(c)){
                sta = s7; accept[index++] = c;
            }else{
                sta = s0; cout<<"syntax error"<<endl;
            }            
        }else if(sta == s7){
            if(isdigit(c)){
                sta = s7; accept[index++] = c;
            }else{
                sta = s0;  //ungetchar(c);
                break;
            }
        }
    }
    return accept;
}

int main()
{   
    while(true){
        cout<<">>";
        check();   
        accept[index] = '\0';
        cout<<"index: "<<index<<endl;
        cout<<"accept: "<<accept<<endl;
        cout<<endl;
        cout<<atof(accept)<<endl;
    }
}


    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?