C++实现顺序计算输入表达式的值

#include <iostream>
#include <cstring>
#include <cctype>//判断字符类型需要的头文件
using namespace std;
int main()
{

        string str;
    l:    cin>>str;
        char *a;
          strncpy(a,str.c_str(),str.length());//将输入的字符串转换为字符数组
        int b[100];
        char c[100];//准备b,c数组分别来存储依次输入的数字与运算符字符
        int k=0,l=0;
        int sum=0;
         for(int i=0;i<str.length();i++)
        {
            if(isdigit(a[i]))
            {
                b[k++]=a[i]-48;
            }
            else
            {
                if(a[i]!=‘+‘ && a[i]!=‘-‘ && a[i]!=‘*‘)//来判断输入的运算符是否合理。
                {
                    cout<<"输入有误:请重新输入:(只能是包含数字和+ - *字符)"<<endl;
                    goto l;
                }
                else
                {
                    c[l++]=a[i];
                }

            }
        }
         int count=0;
         for(int i=0;i<100;i++)
         {
             if(b[i]!=0)
             {
                 count++;
             }
         }
        int z=1;
        sum=b[0];
        while(z<count)
        {
            int zz=z-1;
            switch(c[zz])//来判断输入的运算符。
            {
            case ‘+‘:
                sum=sum+b[z];
                break;
            case ‘-‘:
                sum-=b[z];
                break;
            case ‘*‘:
                sum=sum*b[z];
                break;
            }
            ++z;
        }
        cout<<sum<<endl;   //输出最终结果。
    return 0;
}
        

如下实例:

时间: 2024-09-28 21:43:45

C++实现顺序计算输入表达式的值的相关文章

利用栈计算算数表达式的值

先将中缀表达式利用栈转换为后缀表达式,然后再利用栈由后缀表达式计算算数表达式的值,具体代码如下: #include <iostream> using namespace std; #include <string> #include <vector> #include <stack> enum Type { OP_NUM, OP_SYMBOL, }; enum Operat { ADD, SUB, MUL, DIV, }; struct Cell { Typ

计算字符串表达式的值

一.题目描述 给你一个字符串,包含+,-,*,/和(),数字为0-9,让计算该表达式的值,例如"1+2*3-(8/4)+6",结果为11,这是前几天面试去哪儿网,二面面试官让手撕的题目.记忆中本科的时候遇到过,当时也没啥思路.其实这个题需要分两步完成,第一步:把字符串表达式的中缀形式转为后缀形式,怎么转有一定的规则.第二步:计算后缀表达式的值. 关于什么是前缀,中缀,后缀表达式,请读者自己查阅资源,这里就不介绍了.我们只谈如何从中缀转为后缀,规则如下: 首先定义一个栈stack用来保存

NYOJ--128--前缀式计算(表达式求值)

前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 4) 5) ) 把括号去掉就是:+ 2 * + 3 4 5 最后这个式子就是该表达式的前缀表示. 给你一个前缀表达式,请你计算出该前缀式的值. 比如: + 2 * + 3 4 5的值就是 37 输入 有多组测试数据,每

java实现计算算术表达式的值(后缀表达式方式)

Java代码   package zn.sd.ly.jtree.test; /** * 表达式 * * @author 风华褚胜--刘胜军 */ import java.util.Arrays; import java.util.Scanner; import java.util.Stack; public class Four { @SuppressWarnings("resource") public static void main(String[] args) { Scanne

练习3.19 计算后缀表达式的值

int main() { int MaxSize = 100,i,j; char tmp[10]; PtrToStack s; s = CreateStack(MaxSize); while( scanf("%s",tmp) != EOF ) { int len,num=0,val1,val2; len = strlen(tmp); if( tmp[0] == '\n') break; if( len == 1 && tmp[0] >=48 &&

栈的应用—算术表达式求值

例三.算术表达式求值 1.问题描述 当一个算术表达式中含有多个运算符,且运算符的优先级不同的情况下,如何才能处理一个算术表达式????? 2.思路 首先我们要知道表达式分为三类:  ①中缀表达式:a+(b-c/d)*e ②前缀表达式+a*-be ③后缀表达式abcd/-e*+ 由于运算符有优先级,所以在计算机中计算一个中缀的表达式非常困难,特别是带括号的更麻烦,而后缀表达式中既无运算符优先又无括号的约束问题因为在后缀表达式中运算符出现的顺序正是计算的顺序,所以计算一个后缀的表达式更简单.所以,可

表达式求值:从“加减”到“带括号的加减乘除”的实践过程

本文乃Siliphen原创,转载请注明出处:http://blog.csdn.net/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个数值不是一个常量,而是根据关卡的某些环境数据套上一个计算表达式算出来的.这个需求无法用excel拖表预计算出,因为关卡的环境数据只有在游戏中才能产生,在excel制表时,这些都是未知的.作为程序员,我可以把计算表达式硬编码在代码中,但这个做法有缺陷,如果策划要修改计算表达式的话,只能通过我修改程序并

表达式求值 (栈) 用C++实现

1 #include <cstdio> 2 3 #include <cstdlib> 4 5 #include <cmath> 6 7 #include <stack> 8 9 #include <cstring> 10 11 using namespace std; 12 13 14 15 char Precede(char a, char b) { //判断运算符优先级 16 17 int i, j; 18 19 char Table[8][

【算法】E.W.Dijkstra算术表达式求值

算术表达式求值 我们要学习的一个栈的用例同时也是展示泛型的应用的一个经典例子,就是用来计算算术表达式的值,例如 ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) ) 如果将4乘以5,把3加上2,取它们的积然后加上1,就得到了101.但Java系统是如何完成这些运算的呢?不需要研究Java系统的构造细节,我们也可以编写一个Java程序来解决这个问题.它接受一个输入字符串(表达式)并输出表达式的值.为了简化问题,首先来看一下这份明确的递归定义:算术表达式可能是一个数,或者是由一个左括号