2013-05-27 119 views
0

假设我写了“5和6”或“5 + 6”。我如何将5和6分配给c#中的两个不同变量?从字符串c解析多个值#

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

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

正则表达式是你走的路:http://msdn.microsoft.com/es-es/library/system.text.regularexpressions.regex%28v=vs.80%29.aspx –

+0

为此做出条件。就像'if(string.Contains(“+”)|| string.Containts(“plus”)|| string.Contains(“and”){...}' – PiLHA

+9

这个问题很含糊。 ?数字之间可能只有_anything_吗?可以有多于两个数字吗?任何有针对性的解决方案都需要比迄今为止给出的更多的信息 –

回答

8
string input="5+5"; 

var numbers = Regex.Matches(input, @"\d+") 
        .Cast<Match>() 
        .Select(m => m.Value) 
        .ToList(); 
+0

Love it!'+ 1' .. –

+0

简洁!非常好。 – David

0

你应该为你的字符串中使用的另一个名字比string

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

注:那是没有任何错误检查或错误处理的实现......

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

0

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

简单的例子,如果你只有一个号有文本现在

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。

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; 
     } 
2

就我个人而言,我会投反对票做一些拆分和正则表达式的东西。相反,我会(并在过去)使用许多文库中的一个,例如, this one over at Code Project(和updated version over at CodePlex)。

使用上面的解析器/工具,你可以做这样的事情:

enter image description here

然后由一个简单的表达式求值可能看起来像:

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

对我来说这是更无差错而不是单独进行解析,包括正则表达式等等。

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); 
    } 
} 

列表将包含所有的整数值

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 "+": 
      . 
      . 

      . 


     }