社区
数据结构与算法
帖子详情
怎样求删除括号???
yougaocuo
2002-07-22 10:23:39
问题描述:
输入一个表达式,将其中不需要的括号删去。如:
输入:(a+b)+c
(a*b)+c/(d*e)
a+b/(c-d)
应输出:
a+b+c
a*b+c/(d*e)
a+b/(c-d)
该怎样编出来?(用c程序!)谢了!!
...全文
93
14
打赏
收藏
怎样求删除括号???
问题描述: 输入一个表达式,将其中不需要的括号删去。如: 输入:(a+b)+c (a*b)+c/(d*e) a+b/(c-d) 应输出: a+b+c a*b+c/(d*e) a+b/(c-d) 该怎样编出来?(用c程序!)谢了!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xDraw
2002-07-26
打赏
举报
回复
int level(char ch)
{
int level = 0;
if((ch=='+')||(ch=='-'))
{
level = 1;
}
else if((ch=='*')||(ch=='/'))
{
level = 2;
}
/*
else if((ch>='a' && ch<='z')||(ch>='A' && ch<='B')||
(ch>='0' && ch<='9')||(ch=='(')||(ch==')'))
{
level = 0;
}
*/
return level;
}
void slim(char* s, char* d, int &sn, int &dn, int& l)
{
int i=0,j=0, lt=0, l1, l2, sn1, dn1, li, lo;
char ch;
ch = s[0];
while(ch)
{
d[j]=ch;
j++;
if(ch == ')')
{
j--;
d[j]=0;
break;
}
else if(ch == '(')
{
if(i!=0)
l1=level(s[i-1]);
else
l1=0;
slim(&s[i+1],&d[j],sn1,dn1,li);
if(s[i+sn1+2]!=0)
l2=level(s[i+sn1+2]);
else
l2=0;
lo=(l1>l2)?l1:l2;
if(li==0) li=1;
if(li>=lo) // slim
{
memcpy(&d[j-1],&d[j],dn1);
j+=(dn1-1);
d[j]=0;
}
else
{
d[j+dn1]=')';
j+=(dn1+1);
d[j]=0;
}
i+=(sn1+2);
ch=s[i];
}
else
{
if(level(ch)>0)
{
if(lt!=0)
lt=(level(ch)<lt)?level(ch):lt;
else
lt=level(ch);
}
i++;
ch=s[i];
}
}
l=lt;
sn=i;
dn=j;
}
void CTestDlg::OnButton3()
{
UpdateData();
if(m_strSrc == _T(""))
return;
//((a*b+(c+d))+f*(g))
char s[512];
char d[512];
memset(s,0,512);
memset(d,0,512);
strcpy(s,LPCTSTR(m_strSrc));
int sn,dn,l=0;
slim(s,d,sn,dn,l);
AfxMessageBox(d);
}
zzwu
2002-07-25
打赏
举报
回复
这一问题除了牵涉运算符的优先级别外,还牵涉运算的可交换性,需要周到的分析,不过不会太繁. 先可一一考察,然后总结出一个规律. 举例说, 如
1. 在'+'号后的'('及其对应的')'总是多余的, 可以无条件删去,
2. 在'-'号后的一对( ), 则要查( )内的表达式是否因子, 是,可删,否则不,
3. 在'*'号后的( ), 同样要查( )内的表达式, 是因子,可删,
4. 在'/'号后的( ), 除非( )内是常量,变量,否则都不可删,
等等
MrRight
2002-07-24
打赏
举报
回复
建议找编译原理书看,专门解决这些问题
chenggn
2002-07-23
打赏
举报
回复
我知道. 判断是否可以删除
就是处理括号 内部最低运算符 和 括号左边 以及括号右边的关系
许野平
2002-07-23
打赏
举报
回复
我打算写一个解法,有兴趣的清等...
ynli2002
2002-07-23
打赏
举报
回复
应该用栈实现
找一个计算器源程序读读
项目花园范德彪
2002-07-23
打赏
举报
回复
关注
项目花园范德彪
2002-07-23
打赏
举报
回复
ml_jack(Jack)
也不行呀
:(a+b)+c
和:a+(b+c)都是没有用的,怎么才能分出他们呢
yougaocuo
2002-07-23
打赏
举报
回复
c程序怎么写呢?有没有可以给范例的?????
fwbmail
2002-07-22
打赏
举报
回复
我是这样想的 :
1.进入一个括号前,记录括号前的所有算式的最高优先权符号a
2.在括号内的算式的最低优先权符号b
3.括号后面的最高优先权符号c
如果b>=a && c>=b,则这个括号没有用
只是简单地推测了一下,没有考虑细节,你可以扩展一下
zhouxinghai
2002-07-22
打赏
举报
回复
好问题,收藏
Superping
2002-07-22
打赏
举报
回复
用c编过计算器吗,通过栈实现,很简单,建议参考计算器的源程序
ml_jack
2002-07-22
打赏
举报
回复
将表达式转化为逆波兰式(没括号的)
如果一对括号去掉后该逆波兰式不变,则可去掉
一遍扫描只判断一个括号是否能去掉,从最内层开始
似乎有些麻烦...
这是我看题直接想到的
大家讨论一下应该有更好的方法!!! :)
nethermit
2002-07-22
打赏
举报
回复
扫描一遍,做一个堆栈,算法应该很简单的
vb6
删除
字符串
括号
及里面内容
"vb6
删除
字符串
括号
及里面内容"这个主题涉及到如何有效地从字符串中移除特定类型的
括号
(通常是方
括号
`[]`、圆
括号
`()`或花
括号
`{}`)以及它们包围的任何内容。以下是一些关键知识点: 1. **字符串变量**:VB6中的...
正则表达式
删除
中
括号
及其中内容
在本例中,我们将重点介绍如何使用正则表达式来
删除
字符串中的中
括号
及其中的内容。 首先,我们需要了解中
括号
在正则表达式中的作用。中
括号
通常用来定义字符集,用于匹配任何单个字符,该字符属于中
括号
内列出的...
批处理:
删除
文件名中两个
括号
(小中大各种组合)及之间的内容?待检验.txt
批处理:
删除
文件名中两个
括号
(小中大各种组合)及之间的内容?待检验批处理:
删除
文件名中两个
括号
(小中大各种组合)及之间的内容?待检验
数据结构
括号
匹配
### 数据结构
括号
匹配知识点详解 #### 一、实验背景及目标 本次实验来源于北京建筑工程学院理学院的数据结构与算法课程。实验的主要目的是通过实践掌握栈的基本操作,并具体应用于
括号
匹配问题。实验要
求
学生使用...
正则表达式去除中
括号
(符号)及里面包含的内容
在本主题中,我们将探讨如何使用正则表达式去除中
括号
(包括方
括号
`[`和`]`)以及它们内部包含的内容。 首先,我们要解决的问题是如何去除中
括号
及其内容。在PHP中,可以使用`preg_replace`函数配合正则表达式来...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章