假设我写了“5和6”或“5 + 6”。我如何将5和6分配给c#中的两个不同变量?从字符串c解析多个值#
P.S.如果某些字符在字符串中找到,我也想做一些工作。假设我写了5 + 5。这段代码会这样做吗?
if(string.Contains("+"))
{
sum=x+y;
}
假设我写了“5和6”或“5 + 6”。我如何将5和6分配给c#中的两个不同变量?从字符串c解析多个值#
P.S.如果某些字符在字符串中找到,我也想做一些工作。假设我写了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();
Love it!'+ 1' .. –
简洁!非常好。 – David
你应该为你的字符串中使用的另一个名字比string
var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);
注:那是没有任何错误检查或错误处理的实现......
您可以使用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);
,如果你想要更多分析的东西复杂,你可以使用分裂()和/或正则表达式来获得之间的所有数字和运算他们。你只是迭代数组并将数字赋给变量。
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。
使用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;
}
就我个人而言,我会投反对票做一些拆分和正则表达式的东西。相反,我会(并在过去)使用许多文库中的一个,例如, this one over at Code Project(和updated version over at CodePlex)。
使用上面的解析器/工具,你可以做这样的事情:
然后由一个简单的表达式求值可能看起来像:
Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());
对我来说这是更无差错而不是单独进行解析,包括正则表达式等等。
像这样的东西可能有帮助
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 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 "+":
.
.
.
}
正则表达式是你走的路:http://msdn.microsoft.com/es-es/library/system.text.regularexpressions.regex%28v=vs.80%29.aspx –
为此做出条件。就像'if(string.Contains(“+”)|| string.Containts(“plus”)|| string.Contains(“and”){...}' – PiLHA
这个问题很含糊。 ?数字之间可能只有_anything_吗?可以有多于两个数字吗?任何有针对性的解决方案都需要比迄今为止给出的更多的信息 –