黑马程序员技术交流社区
标题: C#中怎样让字符串中的运算符表现出运算的性质?呼叫大神... [打印本页]
作者: 马炜亮 时间: 2013-6-4 00:18
标题: C#中怎样让字符串中的运算符表现出运算的性质?呼叫大神...
本帖最后由 马炜亮 于 2013-6-5 14:51 编辑
如
object sum="1+2";
Console.WriteLine(sum);
怎样让输出的是3而不是"1+2"?
作者: xiangsoft 时间: 2013-6-4 00:21
这个不行吧,
你这个运算符已经算是字符串性质了
作者: a724228803 时间: 2013-6-4 06:03
“+”在C#中有两种意义:
1. 在数学中的加法运算:两边参与加法运算的数据类型为数字类型,则“+
“表示数学上的加法意义。
2. 是连接的意思:两边参与加号运算的数据,有一个是字符类型,那么这个“+“好就是连接的意义。
所以:要想让输出的为运算结果,就必须保证“+”两边都为数字类型的数据。字符串可用
int a=conver.ToInt32("带转换的字符串");
或者 int b=int.parse("字符串");
将字符串转换成数字后就能 得到你想要的输出结果呢
作者: a724228803 时间: 2013-6-4 06:09
根据你题目的意思:
“1+2";是字符串类型
如果你改写成:object sum=1+2; 也可以输出结果3
并且字符串“1+2” 是不能转换成数字的
建议你还是好好加强下基础,多看视频,很基本的概念而已
作者: 王洪磊 时间: 2013-6-4 10:42
下面是我从网上找到的资料,希望对你有所帮助。
/// <summary>
/// 将字符串中的运算符按正常计算 例如按四则运算
/// </summary>
/// <param name="expression">标准表达式如 1+15*0.5-200</param>
/// <returns>返回计算的值,可以为任意合法的数据类型</returns>
protected static object MathCalculate(string expression)
{
object retvar = null;
Microsoft.CSharp.CSharpCodeProvider provider = new Microsoft.CSharp.CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters cp = new System.CodeDom.Compiler.CompilerParameters(
new string[] { @"System.dll" });
StringBuilder builder = new StringBuilder("using System;class CalcExp{public static object Calc(){ return \"expression\";}}");
builder.Replace("\"expression\"", expression);
string code = builder.ToString();
System.CodeDom.Compiler.CompilerResults results;
results = provider.CompileAssemblyFromSource(cp, new string[] { code });
if (results.Errors.HasErrors)
{
retvar = null;
}
else
{
System.Reflection.Assembly a = results.CompiledAssembly;
Type t = a.GetType("CalcExp");
retvar = t.InvokeMember("Calc", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.InvokeMethod
, System.Type.DefaultBinder, null, null);
}
return retvar;
}
作者: 马炜亮 时间: 2013-6-5 14:53
:)兄弟,这个是可以的,处理代码会方便很多。办法见下边。。
作者: 马炜亮 时间: 2013-6-5 14:56
:)谢谢啦,想的很周到哈,讲的也很详细哈。
作者: 马炜亮 时间: 2013-6-5 14:56
谢谢你的建议:)
作者: 马炜亮 时间: 2013-6-5 15:01
兄弟你给的这个方法功能很强大,我收藏了,谢谢哈。 :lol
处理比较简单的我找到了一种代码比较少的办法,分享下哈:
DataTable dt = new DataTable();//要先 using System.Data;
object sum = dt.Compute("1+2","");
Console.WriteLine(sum);//这样输出的就是3而不是"1+2"了。
作者: 关关雎鸠 时间: 2013-6-5 15:29
你没理解楼主的意思。。
作者: 关关雎鸠 时间: 2013-6-5 15:33
呵呵,用字符串分隔吧。。。
object sum = "1+2";
string[] str = sum.ToString().Split('+');
int num = Convert.ToInt32(str[0]) + Convert.ToInt32(str[1]);
Console.WriteLine(num);
/**********************输出的是3**********************/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |