假设我写了“5和6”或“5 + 6”。如何在c#中将5和6分配给两个不同的变量?
P.S。如果在字符串中找到某些字符,我也想做某些工作。假设我写了5 + 5。这段代码会这样做吗?
if(string.Contains("+"))
{
sum=x+y;
}
答案 0 :(得分:8)
string input="5+5";
var numbers = Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(m => m.Value)
.ToList();
答案 1 :(得分:2)
就个人而言,我会投票反对做一些分裂和正则表达式的东西。
相反,我会(并且在过去做过)使用众多表达式评估库中的一个,例如this one over at Code Project(以及updated version over at CodePlex)。
使用上面的解析器/工具,您可以执行以下操作:
然后,简单的表达式评估可能如下所示:
Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());
对我而言,这比单独进行解析(包括正则表达式等)更具有错误性。
答案 2 :(得分:1)
这样的事情可能会有所帮助
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);
}
}
list将包含所有整数值
答案 3 :(得分:0)
您的字符串应使用其他名称,而不是string
var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);
注意:这是一个没有任何错误检查或错误处理的实现......
答案 4 :(得分: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
。
答案 5 :(得分:0)
如果要将字符串中的数字分配给变量,则必须解析字符串并进行转换。
简单示例,如果您的文字只有一个数字
string text = "500";
int num = int.Parse(text);
现在,如果要解析更复杂的东西,可以使用split()和/或regex来获取它们之间的所有数字和运算符。比你只是迭代数组并为变量赋值。
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个数字和operazor,那就ok了。如果你想制作“计算器”,你将需要更多东西,比如Binary Trees或Stack。
答案 6 :(得分:0)
使用String.Split方法。它将你的字符串rom分割为给定的字符,并返回一个字符串数组,其中包含根据要破坏的字符分解为多个部分的值,在本例中为“+”。
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;
}
答案 7 :(得分: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 "+":
.
.
.
}
答案 8 :(得分:0)
拆分功能可能使用起来很舒适,但空间效率低
因为它需要字符串数组
也许Trim(),IndexOf(),Substring()可以代替Split()函数