0

假设我写了“5 和 6”或“5+6”。如何在 c# 中将 5 和 6 分配给两个不同的变量?

PS如果在字符串中找到某些字符,我也想做一些工作。假设我写了 5+5。这段代码会这样做吗?

 if(string.Contains("+"))
 {
     sum=x+y;
 }
4

9 回答 9

9
string input="5+5";

var numbers = Regex.Matches(input, @"\d+")
                   .Cast<Match>()
                   .Select(m => m.Value)
                   .ToList();
于 2013-05-27T14:42:13.313 回答
2

就个人而言,我会投票反对做一些分裂和正则表达式的事情。

相反,我会(并且过去确实)使用许多表达式评估库之一,例如Code Project 上的这个(以及CodePlex 上的更新版本)。

使用上面的解析器/工具,您可以执行以下操作:

在此处输入图像描述

一个简单的表达式评估可能如下所示:

Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());

对我来说,这比我自己进行解析(包括正则表达式等)更能防错。

于 2013-05-27T14:47:46.297 回答
0

您可以使用String.Split类似的方法;

string s = "5 and 6";
string[] a = s.Split(new string[] { "and", "+" }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(a[0].Trim());
Console.WriteLine(a[1].Trim());

这是一个DEMO.

于 2013-05-27T14:44:03.593 回答
0

如果要将字符串中的数字分配给变量,则必须解析字符串并进行转换。

简单的例子,如果你的文本只有一个数字

string text = "500";
int num = int.Parse(text);

现在,如果你想解析更复杂的东西,你可以使用 split() 和/或正则表达式来获取它们之间的所有数字和运算符。比您只需迭代数组并将数字分配给变量。

string text = "500+400";
if (text.Contains("+"))
{
 String[] data = text.Split("+");
 int a = int.Parse(data[0]);
 int b = int.Parse(data[1]);
 int res = a + b;
}

基本上,如果它们之间只有 2 个数字和运算符,就可以了。如果你想制作“计算器”,你需要更多的东西,比如二叉树或堆栈。

于 2013-05-27T14:44:26.580 回答
0

使用 String.Split 方法。它将您的字符串从给定字符拆分并返回一个字符串数组,其中包含根据要中断的字符分解为多个部分的值,在这种情况下,它的“+”。

        int x = 0;
        int y = 0;
        int z = 0;

        string value = "5+6";
        if (value.Contains("+"))
        {
            string[] returnedArray = value.Split('+');
            x = Convert.ToInt32(returnedArray[0]);
            y = Convert.ToInt32(returnedArray[1]);
            z = x + y;
        }
于 2013-05-27T14:45:59.437 回答
0

这样的事情可能会有所帮助

string strMy = "5&6";
char[] arr = strMy.ToCharArray();
List<int> list = new List<int>();
foreach (char item in arr)
{
  int value;
  if (int.TryParse(item.ToString(), out value))
  {
    list.Add(item);
  }
}

列表将包含所有整数值

于 2013-05-27T14:50:01.453 回答
0

您应该为您的字符串使用另一个名称,而不是string

var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);

注意:这是一个没有任何错误检查或错误处理的实现......

于 2013-05-27T14:42:41.323 回答
0

使用正则表达式获取这些值,然后打开操作数进行计算

        string str = "51 + 6";
        str = str.Replace(" ", "");
        Regex regex = new Regex(@"(?<rightHand>\d+)(?<operand>\+|and)(?<leftHand>\d+)");

        var match = regex.Match(str);
        int rightHand = int.Parse(match.Groups["rightHand"].Value);
        int leftHand = int.Parse(match.Groups["leftHand"].Value);
        string op = match.Groups["operand"].Value;

        switch (op)
        {
            case "+":
            .
            .

            .


        }
于 2013-05-27T15:00:06.557 回答
0

拆分函数可能使用起来很舒服,但空间效率低,因为它需要字符串数组
也许 Trim()、IndexOf()、Substring() 可以替换 Split() 函数

于 2020-01-13T07:06:29.417 回答