免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1712 | 回复: 7
打印 上一主题 下一主题

[C] 急!请教关于表达式的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-10 09:32 |只看该作者 |倒序浏览
我想写个函数,函数参数是个表达式,比如sum=(a>b)&&(a>c)||(d<e),我在函数里面想把比较符找出来,有没有好的办法?因为这里的表达式可能有多个参数,
比如:sum=(a>b)&&(a>c)
或者:sum=(a>b)||(d<e)
或者:sum=(a>b)&&(a>c)||(d<e)&&(e<f)
想了半天,像sql语句中这个也没办法实现,不知道该怎么弄了?不管后面的表达式怎么复杂,我只需要得到结果,不知哪位有没有好的办法?

[ 本帖最后由 siqun2008 于 2008-8-10 09:50 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-08-10 13:01 |只看该作者
像这样?
#include <stdio.h>

void
find_rela(char *expr, char *oper)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(*expr++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (*expr == '>' || *expr == '<') {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*oper++ = *expr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}

int
main(void)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char oper_buf[1024];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find_rela("sum=(a>b)&&(a>c)||(d<e)&&(e<f)", oper_buf);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s\n", oper_buf);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}

论坛徽章:
0
3 [报告]
发表于 2008-08-10 13:07 |只看该作者
晕,该不会是老师留的作业吧

论坛徽章:
0
4 [报告]
发表于 2008-08-10 14:32 |只看该作者
把字符串查找一遍难道找不出来吗

论坛徽章:
0
5 [报告]
发表于 2008-08-11 09:21 |只看该作者
原帖由 xi2008wang 于 2008-8-10 13:01 发表
像这样?
#include

void
find_rela(char *expr, char *oper)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(*expr++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb ...



可能是我的意思没有表达清楚,函数的入参是个表达式,但是问题就是出在这个表达式上,
举些例子吧:sum=(a>b)&&(a>c)||(b==e)||(g!=h)&&(i>=j)||(m<=n)||(strcmp(w,q)),
相当于是表达式中可能包含int,long,double,char型数据的比较,
不管这个表达式有多么复杂,函数的功能就是得到这个表达式的结果值,即要么是0,要么是1。
不知道有没有什么好的建议?期待中。。。

论坛徽章:
0
6 [报告]
发表于 2008-08-12 11:40 |只看该作者
不太懂你的意思,大致猜测一下,你是有一个表达式作为一个字符串传递给一个函数,这个函数的功能就是求得这个表达式的结果,简单的说就是把一段代码作为数据传给函数,又要像代码这样执行。 我能想到的是你解析这个字符串,还原为本来的类型 再作运算

论坛徽章:
0
7 [报告]
发表于 2008-08-12 13:28 |只看该作者
比如:sum=(a>b)&&(a>c)
或者:sum=(a>b)||(d<e)
或者:sum=(a>b)&&(a>c)||(d<e)&&(e<f)

要找出其中的比较符太难了,很多表达式都可以得到同一个结果,

你的意思是打出表达式么

论坛徽章:
0
8 [报告]
发表于 2008-08-12 13:33 |只看该作者
可能是我的意思没有表达清楚,函数的入参是个表达式,但是问题就是出在这个表达式上,
举些例子吧:sum=(a>b)&&(a>c)||(b==e)||(g!=h)&&(i>=j)||(m<=n)||(strcmp(w,q)),
相当于是表达式中可能包含int,long,double,char型数据的比较,
不管这个表达式有多么复杂,函数的功能就是得到这个表达式的结果值,即要么是0,要么是1。
不知道有没有什么好的建议?期待中。。。

-------------------------------------------

还是没看懂什么意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP