7-53 切分表达式 isdigit_

在这里插入图片描述

输入样例:

32*((2-2)+5)/(-15)

输出样例:

32
*
(
(
2
-
2
)
+
5
)
/
(
-15
)

知识点

  1. isdigit : 检查其参数是否为十进制数字字符
/* 找出字符串str中为阿拉伯数字0~9的字符*/
#include<iostream>
#include<cctype>
 
using namespace std;
 
int main()
{
    string str = "123@#FDsP[e?";
    for(int i = 0; str[i] != 0; ++i)
    {
        if(isdigit(str[i]))
            cout << str[i] << " is an digit character" <<endl;
    }
    return 0;
}

代码

#include<bits/stdc++.h>
//#include<ctype.h>  上一个包含了
using namespace std;
typedef long long ll;

int main(){
	string s;
	cin>>s;
	ll len=s.size(),now=0;
	while(now<len){
		if(isdigit(s[now])){ 
			while(isdigit(s[now])||s[now]=='.'){ //是数字 或者 是 . 
				putchar(s[now]); 
				now++;       //因为要连续输出 数字 所以 while 
			}
			puts(""); //输出字符串并换行 ; 此处就是换行 
		}else{
			putchar(s[now]);
			if(!(   ((s[now]=='+'||s[now]=='-')&&isdigit(s[now+1])) &&  (s[now-1]=='('||now==0)   )) //如果!里面的成立就不换行 
			{
				puts("");
			}
			now++;
		}
	}
}

测试点

1 s[now]= =’.’
24 (s[now]= =’+’||s[now]= =’-’)&&now==0 满足则不换行 +2 -2
3 (s[now]= =’+’||s[now]= =’-’)&&s[now-1]= =’(’ (+2
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现数学表达式的分析树,可以采用以下步骤: 1. 将中缀表达式转换为后缀表达式,例如将 "3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3" 转换为 "3 4 2 * 1 5 - 2 3 ^ ^ / +" 2. 用栈来实现后缀表达式的计算。从左到右遍历后缀表达式,遇到数字则入栈,遇到运算符则从栈中弹出相应数量的数字进行计算,并将计算结果入栈。最终栈中只剩下一个数字,即为表达式的计算结果。 3. 用二叉树来实现分析树。从右往左遍历后缀表达式,遇到数字则将其作为叶节点,遇到运算符则将其作为根节点,将弹出的两个数字作为左右子树。最终根节点即为表达式的根节点。 下面是一个简单的 Python 实现: ```python class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None def build_expression_tree(postfix): stack = [] for token in postfix: if token.isdigit(): node = TreeNode(int(token)) stack.append(node) else: right = stack.pop() left = stack.pop() node = TreeNode(token) node.left = left node.right = right stack.append(node) return stack.pop() def evaluate_expression_tree(root): if root.val.isdigit(): return int(root.val) else: left_val = evaluate_expression_tree(root.left) right_val = evaluate_expression_tree(root.right) if root.val == "+": return left_val + right_val elif root.val == "-": return left_val - right_val elif root.val == "*": return left_val * right_val elif root.val == "/": return left_val / right_val elif root.val == "^": return left_val ** right_val postfix = "3 4 2 * 1 5 - 2 3 ^ ^ / +" root = build_expression_tree(postfix) result = evaluate_expression_tree(root) print(result) ``` 输出结果为:3.0001220703125
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DDouble-

你的鼓励是我最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值