假设我写了“5 和 6”或“5+6”。如何在 c# 中将 5 和 6 分配给两个不同的变量?
PS如果在字符串中找到某些字符,我也想做一些工作。假设我写了 5+5。这段代码会这样做吗?
if(string.Contains("+"))
{
sum=x+y;
}
string input="5+5";
var numbers = Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
就个人而言,我会投票反对做一些分裂和正则表达式的事情。
相反,我会(并且过去确实)使用许多表达式评估库之一,例如Code Project 上的这个(以及CodePlex 上的更新版本)。
使用上面的解析器/工具,您可以执行以下操作:
一个简单的表达式评估可能如下所示:
Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());
对我来说,这比我自己进行解析(包括正则表达式等)更能防错。
您可以使用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
.
如果要将字符串中的数字分配给变量,则必须解析字符串并进行转换。
简单的例子,如果你的文本只有一个数字
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 个数字和运算符,就可以了。如果你想制作“计算器”,你需要更多的东西,比如二叉树或堆栈。
使用 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;
}
这样的事情可能会有所帮助
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);
}
}
列表将包含所有整数值
您应该为您的字符串使用另一个名称,而不是string
var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);
注意:这是一个没有任何错误检查或错误处理的实现......
使用正则表达式获取这些值,然后打开操作数进行计算
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 "+":
.
.
.
}
拆分函数可能使用起来很舒服,但空间效率低,因为它需要字符串数组
也许 Trim()、IndexOf()、Substring() 可以替换 Split() 函数