• 计算表达式的值并输出,表达式由若干个数字和运算符(只包含加号和减号)构成(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
  • 相关阅读:
    SourceForge上发布dedup util 收藏
    IBM快速整合Diligent 触动了谁的神经?
    Data Domain揭开其神秘面纱 加速中国业务发展
    Java NIO原理和使用
    用PDB库调试Python程序
    windows下配置eclipse + Python + PyDev + tornado,并使用pylint进行静态检测
    函数fork与vfork的区别与联系详解
    关于C++中友元类和友元函数的示例讲解
    const成员函数
    pthread_cond_wait()深入解析
  • 原文地址:https://www.cnblogs.com/yinguojin/p/12907730.html
Copyright © 2020-2023  润新知