计算以字符串形式给出的算术表达式

2024-05-04

我正在开发一个项目,需要计算以字符串形式给出的算术表达式的值。

这就是我选择使用的方式,即运行字符串直到符号相乘。在此期间,我保留乘法字符串之前的数字。如果这些数字之前有符号,我会重置字符串。最后,当我计算乘号时,我检查接下来会发生什么并将其保存到另一个字符串中。最后我计算一下结果。依此类推,直到我解决了这个练习(还有其他函数可以解决剩余的方程)。

我的问题是:乘号之前的数字没有重置,除了乘号之后的数字没有保存在额外的字符串中之外,这还会产生问题。

找到乘号并计算它的函数 -

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char str[10] = "3+1-4*6-7";
    char str1[10];
    char str2[10];
    int i, p = 0, k = 0;

    for(i = 0; i < 10; i++) {
        str1[k] = str[i];
        k++;
        if((str[k] == '-') | '+' | '/') {
            str1[0] = 0;
        }
        else if(str1[k] == '*') {
            while((str[i] != '-') | '+' | '*' | '/') {
                str2[p] = str[i];
                p++;
                i++;
            }
        }
    }
    printf("%s--%s\n", str1, str2);
}

感谢任何可以帮助我解决问题的人 或者可以推荐另一种方法来解决它。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct exp {
    char op;
    char *term;
    struct exp *left;
    struct exp *right;
} Exp;

Exp *make_exp2(char *str){
    if(!str || !*str) return NULL;//*str == '\0' is format error.
    char *mul = strrchr(str, '*');
    char *div = strrchr(str, '/');
    Exp *node = malloc(sizeof(*node));
    if(mul == NULL && div == NULL){
        node->op = '\0';
        node->term = str;
        node->left = node->right = NULL;
        return node;
    }
    char *op;
    op = mul < div ? div : mul;
    node->op = *op;
    *op = '\0';
    node->left  = make_exp2(str );
    node->right = make_exp2(op+1);
    return node;
}

Exp *make_exp(char *str){
    if(!str || !*str) return NULL;//*str == '\0' is format error.
    char *minus = strrchr(str, '-');
    char *plus  = strrchr(str, '+');
    if(minus == NULL && plus == NULL)
        return make_exp2(str);
    char *op;
    Exp *node = malloc(sizeof(*node));
    op = minus < plus ? plus : minus;
    node->op = *op;
    *op = '\0';
    node->left  = make_exp(str );
    node->right = make_exp(op+1);
    return node;
}

#ifdef DEBUG

void print(Exp *exp, int level){
    int i;
    if(exp->op){
        for(i=0;i<level;++i)
            printf(" ");
        printf("%c\n", exp->op);
        for(i=0;i<level;++i)
            printf(" ");
        print(exp->right, level+1);
        printf("\n");
        for(i=0;i<level;++i)
            printf(" ");
        print(exp->left, level+1);
        printf("\n");
    } else {
        for(i=0;i<level;++i)
            printf(" ");
        printf("%s\n", exp->term);
    }
}

#endif

int main(void) {
    char str[] = "3+1-4*6-7";
    Exp *exp = make_exp(str);

#ifdef DEBUG
    print(exp, 0);
#endif
    //release exp
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算以字符串形式给出的算术表达式 的相关文章

随机推荐

  • 如何防止 HTML 文本孤儿?

    我经常在图像周围包裹文字 有时文字包裹起来很笨拙 如下所示 在 HTML 中 图像向左浮动 文本如下 p img src images image p p This is my David Copperfield em I was born
  • 如果覆盖率低于一定百分比,则单元测试失败

    我制作了一个执行的 makefilego test cover 是否有可能失败make unit tests如果覆盖范围低于 X 则命令 我该怎么做呢 您可以使用TestMain在你的测试中做到这一点 TestMain 可以充当测试的自定义
  • 我可以将 JPA 2.0 与 Google App Engine 一起使用吗?

    我可以将 JPA 2 0 例如 EclipseLink 与 Google App Engine 一起使用吗 Google AppEngine 的 DataNucleus 插件支持 JDO 和 JPA API 来访问 Google AppEn
  • 将属性类型作为参数传递

    有没有办法将属性作为参数传递给函数 class Car let doors Int 4 let price Int 1000 有没有办法将 Car 属性作为类型传递给函数 我想实现以下目标 func f1 car Car property
  • 无法将 QMap 传递到 SLOT

    所以 这有效 h public slots void addMenu QString passedName signals void clicked const QString text cpp signalMapper new QSign
  • Spring JPA自定义查询与WHERE条件中的参数组合?

    如何在 Spring Data 中编写至少使用三个参数之一的 JPA 查询 我有这三个参数 Id PK Name Surname 客户端必须至少提供这三个参数之一 我想通过这些非空参数找到用户 是否可以为我的存储库创建此类自定义查询 或者我
  • SWIG 的 Python ctypes 回调函数

    我有一个 SWIG C 函数 它需要一个函数指针 WNDPROC 并且想给它一个由 ctypes WINFUNCTYPE 包装的 Python 函数 在我看来 这应该是兼容的 但 SWIG 的类型检查会引发异常 因为它不知道 ctypes
  • detached 和 allocateCurrentContext 是什么意思?

    当我将作业添加到队列中时 DispatchWorkItemFlags 为我们提供了几个选项可供选择 public func sync
  • 为所有图像添加前缀(递归)

    我有一个包含 5000 多张图像的文件夹 全部带有 JPG 扩展名 我想要做的就是递归地向所有图像添加 thumb 前缀 我发现了一个类似的问题 重命名文件和目录 添加前缀 https stackoverflow com questions
  • 地址栏中的 https 锁和公司名称

    我注意到在查看贝宝的网站时 他们的公司名称位于 Chrome 中的锁定图标旁边 这是因为他们创作了 ssl 证书 还是您认为他们是如何实现这一目标的 这是我一直很好奇的事情 但在搜索过程中我很难找到任何答案 您需要一个称为 扩展验证 EV
  • PowerPoint 命令,例如在 Office javascript API 上插入幻灯片或应用等效主题

    我正在开发一个 PowerPoint 加载项 将来它将在 Office Store 中发布 但它是VSTO项目 C 和winforms 无法发布 根据我的搜索 它一定是 Office Web Add in 项目 清单 xml 和网页 我正在
  • 如何让 NHibernate 缓存获取的子集合?

    我有一个相当简单的条件查询来获取子集合 如下所示 var order Session CreateCriteria
  • 自动化脚本:如果 FieldA = 1,则将 FieldB 设置为“one”

    我试图将这个问题分解为可管理的部分 空间查询 https stackoverflow com questions 56587515 maximo spatial query 我认为第一步是创建一个自动化脚本这样做是这样的 从字段中获取值 用
  • AWS Lambda 上的 Google-chrome

    是否可以在带有容器的 AWS Lambda 中使用 puppeteer 运行 Google chrome 而不是 Chromium 当我在浏览器中创建新页面时脚本卡住 const page await browser newPage 来自
  • 为什么 React JS 不自动为动态子项生成键?

    在编写 ReactJS 代码时 我必须为动态子项提供键 例如 render const options this state const availableOptions options map opt gt return
  • VSTS 包源不从上游源提取包 (nuget.org)

    我已经为我们的开发团队在 VSTS 上设置了一个新的团队项目 并且正在使用Package Management用于发布 NuGet 包的扩展 我还启用了公众nuget orgfeed 作为我们内部包 feed 的上游来源 按照推荐here
  • 引导导航栏后面的空间

    使用引导程序navbar 我试图弄清楚如何使其不隐藏主体部分的顶部 实际上 使用这里推荐的方法可以很好地解决这个问题 Twitter Bootstrap 顶部导航栏阻挡页面顶部内容 https stackoverflow com quest
  • 敏感 SSIS 包参数字符串中的特殊字符导致包无效

    我的 SSIS 包上有一个敏感字符串参数 用于存储远程服务器的密码 但是 当字符串值包含大括号时 作业代理会在配置该步骤的包参数时引发错误 Microsoft SQL Server Management Studio 在命令行参数中检测到错
  • 如何使用 PHP 发送 OPTIONS 请求

    有谁知道如何使用 PHP 发送 OPTIONS 请求 我找不到执行此操作的curl setopt 我正在使用 php 5 6 7 我已经弄清楚了 GET POST DELETE 和 PUT 只需要选项 我已经尝试过以下 hd 的答案 ch
  • 计算以字符串形式给出的算术表达式

    我正在开发一个项目 需要计算以字符串形式给出的算术表达式的值 这就是我选择使用的方式 即运行字符串直到符号相乘 在此期间 我保留乘法字符串之前的数字 如果这些数字之前有符号 我会重置字符串 最后 当我计算乘号时 我检查接下来会发生什么并将其