zoukankan      html  css  js  c++  java
  • 一个简单的四则运算

    这是一道笔试题,用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("请输入一个字符串:
    ");
        scanf("%s",str);
        printf("%f
    ",arithmetic(str));
        return 0;
    }

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

  • 相关阅读:
    03_输出程序状态信息
    06_键盘事件
    Silverlight中引用图片的方式
    04_响应单点触控
    02_ListActive中响应事件 并LogCat输出
    批量插入更新的 sql语句
    07_重力倾斜度响应
    读取XML
    人生启示录效应篇之牢骚效应:凡是公司中有对工作发牢骚的人,那家公司或老板一定比没有这种人或有这种人而把牢骚埋在肚子里的公司要成功得多
    鼠标事件之JS
  • 原文地址:https://www.cnblogs.com/newpanderking/p/3795373.html
Copyright © 2011-2022 走看看