zoukankan      html  css  js  c++  java
  • 计算表达式的值并输出,表达式由若干个数字和运算符(只包含加号和减号)构成(C版和python版)

    注:表达式中数字均为正数

    思路:遍历字符串参数,逐个拷贝字符直到遇见运算符,记录运算符和拷贝好的字符串;字符串结束只拷贝字符。

    C版代码如下:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    int analysis(char *expression)
    {
        int i=0,j=0,n=0,m=0,num=0,sum=0;
        int param_len=strlen(expression);
        char *p=expression;
        char strnum[1024];
        char oper[1024];
        int splnum[1024];
        
        memset(strnum, 0x00, 1024);
        memset(oper, 0x00, 1024);
        for(i=0; i<param_len; i++)
        {
            if(p[i] != '')
            {
                if(i == param_len - 1)
                {
                    strnum[n] = p[i];
                    num = atoi(strnum);
                    splnum[m] = num;
                    m++;
                    break;
                }
    
                if(p[i] == '-' || p[i] == '+')
                {
                    n = 0;
                    num = atoi(strnum);
                    splnum[m] = num;
                    oper[m] = p[i];
                    m++;
                    memset(strnum, 0x00, strlen(strnum)*sizeof(char));
                }
                else
                {
                    strnum[n] = p[i];
                    n++;
                }
            }
            else
            {
                break;
            }
        }
    
        sum=splnum[0];
        for(j=0; j<m; j++)
        {
            switch(oper[j])
            {
                case '+':
                    sum += splnum[j+1];
                    break;
                case '-':
                    sum -= splnum[j+1];
                    break;
                default: 
                    break;
            }
        }
        return sum;
    }
    
    int main(){
        int a=analysis("100+200-1");
        printf("%d
    ", a);
    }

    运行结果:

    python版代码如下:

    class Solution:
        def analysis(self,expresion):
            i = 0
            data = ''
            opt = []
            arr = []
            while i < len(expresion):
                if i == len(expresion)-1:
                    data += expresion[i]
                    arr.append(int(data))
                    break
                if expresion[i].isdigit():
                    data=data+expresion[i]
                elif expresion[i] == "+" or expresion[i] == "-":
                    opt.append(expresion[i])
                    arr.append(int(data))
                    data = ''
                else:
                    break
                i += 1
            sum = arr[0]
            i = 0
            for str in opt:
                if opt[i] == "+":
                    sum += arr[i+1]
                elif opt[i] == "-":
                    sum -= arr[i+1]
                else:
                    break
                i += 1
            return sum
    if __name__ == '__main__':
        test=Solution()
        sum=test.analysis('100+200-1')
        print sum
  • 相关阅读:
    Ubuntu 服务器默认的root账号是没有激活的,需要用初装的用户账号给root设置管理密码
    MySQL忘记root密码重置密码(5.7版本)
    SpringMvc与前台ajax数据传递
    将http://localhost:8080设置为项目主页
    javaweb项目主页设置
    Redis在java开发中使用
    eclipse基于git上传项目到码云上
    spring配置tomcat jdbc pool数据库连接池
    run as maven build时报错
    Tomcat-Jdbc-Pool连接池参数说明
  • 原文地址:https://www.cnblogs.com/yinguojin/p/12907730.html
Copyright © 2011-2022 走看看