黑马程序员技术交流社区

标题: 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
xiangsoft 发表于 2013-6-4 00:21
这个不行吧,
你这个运算符已经算是字符串性质了

:)兄弟,这个是可以的,处理代码会方便很多。办法见下边。。
作者: 马炜亮    时间: 2013-6-5 14:56
sdjngl123 发表于 2013-6-4 00:30
你可以进行字符串进行字符获取,获取数字并判断当前字符是否为+、-、*、/,如果为这四个字符中的一个,前面 ...

:)谢谢啦,想的很周到哈,讲的也很详细哈。
作者: 马炜亮    时间: 2013-6-5 14:56
a724228803 发表于 2013-6-4 06:09
根据你题目的意思:
“1+2";是字符串类型
如果你改写成:object sum=1+2;  也可以输出结果3

谢谢你的建议:)
作者: 马炜亮    时间: 2013-6-5 15:01
王洪磊 发表于 2013-6-4 10:42
下面是我从网上找到的资料,希望对你有所帮助。
///  
/// 将字符串中的运算符按正常计算 例如按四则运算

兄弟你给的这个方法功能很强大,我收藏了,谢谢哈。    :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
a724228803 发表于 2013-6-4 06:09
根据你题目的意思:
“1+2";是字符串类型
如果你改写成:object sum=1+2;  也可以输出结果3

你没理解楼主的意思。。
作者: 关关雎鸠    时间: 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