200分 求一个表达式问题

yaotiebing 2004-12-22 12:14:12
Dim lsum As Long

lsum = "100+100"

如何让 lsum 正确的返回200
...全文
229 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
peilianhai 2005-01-06
  • 打赏
  • 举报
回复
'这是我作的加减程序,给你带过来了,可以参考参考
'cal("1+2+3+4+5+6-7-8-9")

Private Function Cal(Content) As Currency
'create by haier99_2000@sohu.com
On Error GoTo Calerr
If Trim(Content & "") & "" = "" Then
Cal = Null
Exit Function
End If
Content = Trim(Content)
If InStr(1, Content, "+", vbTextCompare) = 0 And InStr(1, Content, "-", vbTextCompare) = 0 And Len(Content) > 0 Then
Cal = CCur(Content)
Exit Function
End If
Dim Poss(10) As Integer, AddDec(10) As Boolean, jj, ContentSS, CalI As Integer
jj = 0
Poss(jj) = 1
For CalI = 1 To Len(Content)
ContentSS = Mid(Content, CalI, 1)
Select Case ContentSS
Case "+"
If CalI = 1 Then
Cal = CCur(Content)
Exit Function
End If
jj = jj + 1
Poss(jj) = CalI
AddDec(jj) = True
If Mid(Content, CalI + 1, 1) = "+" Or Mid(Content, CalI + 1, 1) = "-" Then
Content = Left(Content, CalI) & Right(Content, Len(Content) - CalI - 1)
End If
Case "-"
If CalI = 1 Then
Cal = CCur(Content)
Exit Function
End If
jj = jj + 1
Poss(jj) = CalI
AddDec(jj) = False
If Mid(Content, CalI + 1, 1) = "+" Or Mid(Content, CalI + 1, 1) = "-" Then
Content = Left(Content, CalI) & Right(Content, Len(Content) - CalI - 1)
End If
Case "."
If Mid(Content, CalI + 1, 1) = "." Then
Content = Left(Content, CalI) & Right(Content, Len(Content) - CalI - 1)
End If
Case Else
End Select
Next
Cal = 0
Cal = Cal + CCur(Mid(Content, 1, Poss(1) - 1))
If jj >= 2 Then
CalI = 2
Else
CalI = 0
End If
While CalI >= 2 And CalI <= jj
Cal = Cal + CCur(Mid(Content, Poss(CalI - 1), Poss(CalI) - Poss(CalI - 1)))
CalI = CalI + 1
Wend
Cal = Cal + CCur(Mid(Content, Poss(jj), Len(Content) - Poss(jj) + 1))
Exit Function
Calerr:
End
End Function
beyondjay 2004-12-23
  • 打赏
  • 举报
回复
接分
yaotiebing 2004-12-22
  • 打赏
  • 举报
回复
我的意思是想对一个文本表达式求值
pxk 2004-12-22
  • 打赏
  • 举报
回复
他的意思是想对一个文本表达式求值
BearRui 2004-12-22
  • 打赏
  • 举报
回复
lsum = "100+100"

???
怎么long变字符串啦!
pxk 2004-12-22
  • 打赏
  • 举报
回复
自己写个东西把数字分析出来,parser那种。
js倒有个eval
或者用ado.net试试。

Dim lsum As Long
Dim StrSql As string
lsum = "100+100"
StrSql = "select "+ lsum + " as sum"
调用ado.net执行StrSql
lsum = strsql 的执行结果
thooy 2004-12-22
  • 打赏
  • 举报
回复
用substring取值.
OneDotRed 2004-12-22
  • 打赏
  • 举报
回复
呵呵,正则表达式还没有运算的功能哦,这个用正则恐怕不太方便,可以用动态编译试试。
little119 2004-12-22
  • 打赏
  • 举报
回复
O!
支持!
learner01 2004-12-22
  • 打赏
  • 举报
回复
up!
peilianhai 2004-12-22
  • 打赏
  • 举报
回复
举例 "12+34-6+789"
当检测到有“+”“-”时,判断是否还有“+”“-”
如果有,就计算12+34
剩下的字符串为“46-6+789”
返回继续
当到"40+789"时,就计算这个,计算完成后结束过程
我的这个程序现在只支持+ - ,不支持*/(),
你要是要代码的话,明天我给你带过来,
可以参考一下。

goody9807 2004-12-22
  • 打赏
  • 举报
回复
用截取的字符串的方法 如果是有规律的字符串 还比较好弄
skylineforever 2004-12-22
  • 打赏
  • 举报
回复
晕!
junguo 2004-12-22
  • 打赏
  • 举报
回复
从其它贴子里拷的解决方法:
调用 int i = (int)Calc("100+100");
就好了!

public static object Calc(string expression)
{
string className = "Calc";
string methodName = "Run";
expression=expression.Replace("/","*1.0/");

// 创建编译器实例。
ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());
// 设置编译参数。
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;

// 创建动态代码。
StringBuilder classSource = new StringBuilder();
classSource.Append("public class "+ className +"\n");
classSource.Append("{\n");
classSource.Append(" public object " + methodName + "()\n");
classSource.Append(" {\n");
classSource.Append(" return "+ expression + ";\n");
classSource.Append(" }\n");
classSource.Append("}");

//System.Diagnostics.Debug.WriteLine(classSource.ToString());

// 编译代码。
CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());

// 获取编译后的程序集。
Assembly assembly = result.CompiledAssembly;

// 动态调用方法。
object eval = assembly.CreateInstance(className);
MethodInfo method = eval.GetType().GetMethod(methodName);
object reobj = method.Invoke(eval, null);
GC.Collect();
return reobj;

}
yaotiebing 2004-12-22
  • 打赏
  • 举报
回复
楼上的兄弟 怎么解决的
peilianhai 2004-12-22
  • 打赏
  • 举报
回复
关注,我帮你顶

vb中我是这样解决的(只会加减)
先判断“+”“-”
如果有“+”or“-”并且不到末尾,
就计算符号前的数字 和 第一个符号和第二个符号之间的数字
然后变成计算结果+“剩余字符串”
依次循环
uffeng 2004-12-22
  • 打赏
  • 举报
回复
只能用 动态编译
前几天我才解决的
yaotiebing 2004-12-22
  • 打赏
  • 举报
回复
顶上去 亟待解决
yaotiebing 2004-12-22
  • 打赏
  • 举报
回复
回复人: thooy(雨天)用substring取值.
hen很复杂的字符串 加减乘除 都有 还有括号没有办法取
yaotiebing 2004-12-22
  • 打赏
  • 举报
回复
什么 long wu wu无所谓 我就想 把字符串中的表达式 算个结果出来 字符串中的表达式肯定式正确地
加载更多回复(5)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧