假設我寫了「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_嗎?可以有多於兩個數字嗎?任何有針對性的解決方案都需要比迄今爲止給出的更多的信息 –