C++逻辑表达式运算逻辑表达式运算由大写英文字母和符号~、 *、+、()组成逻辑表达式,其中三个符号分别表示逻辑非、与、

1个回答

  • #include

    using namespace std;

    #define MAXSIZE 100

    #define CHARNUM 26

    //定义栈结构体

    typedef struct _stack

    {

    char data[MAXSIZE];

    int top;

    } stack;

    //将输入逻辑表达式字符串转换为逆波兰式的字符串

    void translate(const char *p,char *pout)

    {

    stack op;

    op.top=-1;

    int i=0;

    while (*p!=' ')

    {

    switch (*p)

    {

    case '(':

    op.data[++op.top]=*p;

    *p++;

    break;

    case ')':

    while (op.data[op.top]!='(')

    {

    pout[i++]=op.data[op.top];

    op.top--;

    }

    op.top--;

    *p++;

    break;

    case ':

    op.data[++op.top]=*p;

    *p++;

    break;

    case '*':

    case '+':

    while ((op.top!=-1)&&(op.data[op.top]!='('))

    {

    pout[i++]=op.data[op.top];

    op.top--;

    }

    op.data[++op.top]=*p;

    *p++;

    break;

    case ' ':

    break;

    default:

    pout[i++]=*p;

    *p++;

    }

    }

    while (op.top!=-1)

    {

    pout[i++]=op.data[op.top];

    op.top--;

    }

    pout[i]=' ';

    }

    //逆波兰式的求解

    bool calculator(const char* str)

    {

    stack st;

    st.top=-1;

    char ch0,ch1,c;

    while (*str!=' ')

    {

    switch (*str)

    {

    case '0':

    case '1':

    st.data[++st.top]=*str;

    break;

    case ':

    ch0=st.data[st.top--];

    c=!(ch0-'0')+'0';

    st.data[++st.top]=c;

    break;

    case '+':

    ch0=st.data[st.top--];

    ch1=st.data[st.top--];

    c=((ch0-'0')||(ch1-'0'))+'0';

    st.data[++st.top]=c;

    break;

    case '*':

    ch0=st.data[st.top--];

    ch1=st.data[st.top--];

    c=((ch0-'0')&&(ch1-'1'))+'0';

    st.data[++st.top]=c;

    break;

    default:

    break;

    }

    *str++;

    }

    return st.data[st.top]-'0';

    }

    int main()

    {

    char str[MAXSIZE]={0};

    int chartab[CHARNUM]={0};

    fstream infile;

    fstream outfile;

    int sum;

    //打开输入和输出文件

    infile.open("stackc.in",fstream::in);

    outfile.open("stackc.out",fstream::out);

    //获取第一行字符串

    infile.getline(str,MAXSIZE);

    //获取第二行整数

    sum=infile.get()-'0';

    infile.get();

    //得到各个变量的值

    for (int i=0;i