一个简单的四则运算

这是一道笔试题,用c或c++编程实现+,-,*,/四种运算符的四则运算,运算式存放在一个字符数组中char str[]。如给定字符数组 char str[] = "3+2*5", 那么输出结果为13.

/*************************************************************************
    > Created Time: 2014年06月18日
 ************************************************************************/

#include<stdio.h>
#include<string.h>double arithmetic(char *str)
{
    if(str == NULL)return -1;
    char token_stack[100];
    double num_stack[100];
    int token_index =0, num_index = 0;
    int len = strlen(str);
    for(int i = 0; i < len; i++)
    {
        if(*(str+i) >= ‘0‘ && *(str+i) <= ‘9‘)
        {
            num_stack[num_index++] = *(str+i)-‘0‘;
            continue;
        }
        if(*(str+i) == ‘+‘ || *(str+i) == ‘-‘)
        {
            token_stack[token_index++] = *(str+i);
            continue;
        }
        if(*(str+i) == ‘*‘)
        {
            num_stack[num_index-1] = num_stack[num_index-1] * (*(str+i+1)-‘0‘);
            i++;
            continue;
        }
        if(*(str+i) == ‘/‘)
        {
            num_stack[num_index-1] = num_stack[num_index-1] / (*(str+i+1)-‘0‘);
            i++;
            continue;
        }
    }
    num_index--;
    for(int i = token_index-1; i >= 0; i--)
    {
        if(token_stack[i] == ‘+‘)
        {
            num_stack[--num_index] = num_stack[num_index] + num_stack[num_index+1];
            continue;
        }
        if(token_stack[i] == ‘-‘)
        {
            num_stack[--num_index] = num_stack[num_index] - num_stack[num_index+1];
            continue;
        }
    }
    return num_stack[0];
}

int main()
{
    char str[100];
    printf("请输入一个字符串:\n");
    scanf("%s",str);
    printf("%f\n",arithmetic(str));
    return 0;
}

这里简单说明下,使用两个数组,一个double数组模拟数字栈,一个字符数组模拟符号栈。当遇到乘法和除法直接进行计算,当遇到加法和减法则压栈。当字符串遍历完毕后,从符号栈开始从后向前(或从前向后)以此出栈,同时计算相应的数字。

一个简单的四则运算

时间: 2024-11-06 16:38:51

一个简单的四则运算的相关文章

编译原理实战入门:用 JavaScript 写一个简单的四则运算编译器(四)结语

四则运算编译器,虽然说功能很简单,只能编译四则运算表达式.但是编译原理前端部分几乎都有涉及,词法分析,语法分析,还有代码生成. 再复杂的编译器.再简单的编译器,功能上是差不多的,只是复杂的编译器实现上会更困难. 这个系列的文章是为了帮助你入门,在这个基础上再去看编译原理相关书籍,不至于打瞌睡. 如果你对编译原理很有兴趣,并且想更深一步的学习,在这里强烈推荐你看一本书--我心目中的神书--<计算机系统要素-从零开始构建现代计算机>. 这本书神在哪? 神在它通俗易懂,对小白足够友好,但又不过分肤浅

【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器

vb6是一个典型的拖控件加代码的编程代表,因此也一直被认为难登大雅之堂,但是,在vb6中可以完全纯粹地使用代码控制这个窗体与窗体的控件.这样生成出来的控件位置摆放精确无比,无须拖好控件之后,再利用工具栏的"格式"菜单慢慢地调整大小.这种方式的确定是声明一个控件要耗费大量的代码,但其实Java中的Swing,HTML+CSS排放控件,比这好不了多少. 当然,比vc6中mfc的代码简单了不少,具体见<[mfc]基本对话框程序--加法器>(点击打开链接) 一.基本目标 利用纯粹代

【编程题】简单的四则运算

问题描述: 输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注: 1.表达式只含 +, -, *, /, (, ), 四则运算符 2.表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况 3.要考虑加减乘除按通常四则运算规定的计算优先级 4.除法用整数除法,即仅保留除法运算结果的整数部分.比如8/3=2.输入表达式保证无0作为除数情况发生 5.输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况 •

第一节 构建一个简单的WCF应用

先吐个槽,到目前为止接触的东西也就是些ado.net.select.delete.update.create.临时表的批量操作.及稍微复杂点的几个表之间查询再带几个excel导入导出 然后会点前端的js.jquery等,所以在公司目前薪水并不高(能在广州生活下去吧,什么买车买房的想都别想),拿自己身边的同志一比较感觉心里不怎么平衡,凡事还是得靠自己 自强才是硬道理,就吐到这里吧!开始我的wcf之旅吧 本人理工科类型的文笔很烂 希望各位大神不要喷小弟哦(参照的书本:WCF全面解析) 咱们还是从小学

软件工程第一课,设计简单小学四则运算

题目:设计一个简单的小学四则运算器,要求随机产生30道四则运算题 思路:首先想到的是先产生2个随机数,再用for循环进行30次四则运算 代码: #include<iostream.h>#include<stdlib.h>int main(){ int a ,b,c,i; for(i=0;i<30;i++){ a=rand()%100; b=rand()%100; c=rand()%4; if(c==0) cout<<a<<"+"&l

VC++简单随机四则运算

目标:编写最简单的四则运算,类似A+B=C: 想法:建立一个Win32控制台应用程序,A和B用随机数表示,运算符号用0~3的数字对应,然后计算并输出即可: 具体过程: 利用函数rand(),返回一个0至65535之间的随机数:产生0至3之间的随机数,用rand()%4: 在验证的过程中发现,程序每次生成的随机运算都是相同的,查询发现,要产生不同的随机数,需要用到一个新的函数srand, 这个函数是根据当时计算机的时间给随机数产生一个随机种子(seed),函数原型是srand( (unsigned

Python实现简单的四则运算

GitHub 项目地址 https://github.com/745421831/-/tree/master PSP PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 10 20 · Estimate · 估计这个任务需要多少时间 10 10 Development 开发 360 600 · Analysis · 需求分析 (包括学习新技术) 30 40 · Design Spec · 生成设计文档 30

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program