2013-05-27 187 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 "+": 
      . 
      . 

      . 


     }