这是我到目前为止的JavaScript代码:
var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2])));
linkElement.appendChild(newT);
Run Code Online (Sandbox Code Playgroud)
目前,它从URL中获取数组中倒数第二个项目.但是,我想检查数组中的最后一项是"index.html",如果是,请抓住第三项到最后一项.
设计数学解析器最聪明的方法是什么?我的意思是一个函数,它接受一个数学字符串(如:"2 + 3/2 +(2*5)")并返回计算值?我在VB6很久以前写过一个,但它最终变得臃肿而且不太便携(或者说很聪明......).一般的想法,伪造的代码或真正的代码表示赞赏.
我们希望在我们的c ++程序中有用户定义的公式.例如,值v = x +(y - (z - 2))/ 2.在程序的后面,用户将定义x,y和z - >程序应该返回计算结果.
有些以后公式可能会改变,所以下次程序应该解析公式并添加新值.
任何想法/提示如何做这样的事情?
到目前为止,我刚刚找到解决方案来编写一个解析器来计算这些公式 - 也许是关于它的任何想法?
我想编写一个程序,用特定的值集计算给定的数学函数(由用户).
要求用户输入一个函数,比如他输入f(x)=(x ^ 2)+ 3x + 1然后通过程序我应该显示[f(3),f(6)和f(9的输出) )].
问题具体是如何在类型函数中获取这些x,然后如何将函数从字符串转换为double或float.
你有什么想法吗?
假设我正在使用C或C++
是否有一种简单的方法来解析表示为字符串的简单数学表达式,如(x +(2*x)/(1-x)),为x提供值,并获得结果?
我查看了几个在线示例中的VSAEngine,但是,我收到一个警告,该程序集已被弃用而不使用它.
如果它有任何差异,我使用的是.NET 4.0.
我有一个应用程序需要允许用户编写类似于excel的表达式:
(H1 +(D1/C3))*I8
更复杂的事情
如果(H1 ='True',D3*.2,D3*.5)
我只能用正则表达式做这么多.任何有关正确方法的建议以及我可以学习的任何资源都将不胜感激.
谢谢!
受最近TED演讲的启发,我想写一小段教育软件.研究人员制作了一些名为" Siftables "的小型微型计算机.
替代文字http://images.ted.com/images/ted/tedindex/embed-posters/DavidMerrill-2009.embed_thumbnail.jpg
[David Merril, inventor - with Siftables in the background.]
他使用了很多块应用程序,但我最喜欢的是每个块都是数字或基本操作符号.然后,您可以在一行中重新排列数字块或操作符号,它将在另一个可筛选块上显示答案.
alt text http://i44.tinypic.com/m7us6g.png
所以,我已经决定要在有限的范围内实施一个软件版本的"数学Siftables"作为我正在参加的CS课程的最终项目.
解析和解释一串数学表达式的普遍接受的方法是什么,如果它们有效,执行操作?
这是我应该实现完整解析器/词法分析器的情况吗?我认为解释基本的数学表达式将是计算机科学中的一个半常见问题,所以我正在寻找正确的方法来解决这个问题.
例如,如果我的Math Siftable块在哪里排列如下:
[1][+][2]
这将是一个有效的序列,我将执行必要的操作以达到"3".
但是,如果孩子要将几个操作块拖到一起,例如:
[2][\][\][5]
这显然是无效的.
最终,我希望能够使用用户可以拖动的块来解析和解释任意数量的操作链.任何人都可以向我解释或指向我解析基本数学表达式的资源吗?
我更喜欢尽可能多的语言不可知的答案.
对于一个赋值,我们必须实现像一个非常基本的sexp解析器,这样的输入,如:
"((a b) ((c d) e) f)"
Run Code Online (Sandbox Code Playgroud)
它将返回:
[["a", "b"], [["c", "d"], "e"], "f"]
Run Code Online (Sandbox Code Playgroud)
由于这是一个更大的赋值的一部分,解析器只给出有效的输入(匹配的parens和c).我在Ruby中提出了以下解决方案:
def parse s, start, stop
tokens = s.scan(/#{Regexp.escape(start)}|#{Regexp.escape(stop)}|\w+/)
stack = [[]]
tokens.each do |tok|
case tok
when start
stack << []
when stop
stack[-2] << stack.pop
else
stack[-1] << tok
end
end
return stack[-1][-1]
end
Run Code Online (Sandbox Code Playgroud)
这可能不是最好的解决方案,但它可以完成这项工作.
现在,我对一个惯用的Haskell解决方案的核心功能感兴趣(即我不关心lexing或选择分隔符,考虑已经lexed输入会很好),如果可能只使用"核心"haskell,没有扩展或者像parsec这样的库.
请注意,这不是赋值的一部分,我只是对Haskell的处理方式感兴趣.
我试图找出如何解决已存储在数组中的方程式.我需要一些关于如何克服这种问题的指导.这是我的条件
任何帮助将不胜感激
谢谢
所以我试图制作一个基于用户输入进行数学运算的程序,但是我遇到了一个问题,试图根据它们给出的数学运算符来设置它.
功能:
const operator(int val)
{
if (val == 1)
{
return +;
}
if (val == 2)
{
return -;
}
}
Run Code Online (Sandbox Code Playgroud)
主代码看起来像这样
scanf("%d", val)
output = 4 operator(val) 2
printf("%d", output)
Run Code Online (Sandbox Code Playgroud)
是否有可以代替运营商使用的变量类型?如果没有,是否有办法使变量/函数引用定义的宏?
例如:
#define plus +
Run Code Online (Sandbox Code Playgroud)
那么在代码中引用宏?
最后我知道如果每个输入的情况都可能有,但是对于像
output = 2 operator(val) 5 operator(val) 7 operator(val) 3
Run Code Online (Sandbox Code Playgroud)
这将需要64个if语句,我认为它可以使它工作.
谢谢你的阅读,我的斗智尽头.