2017-04-19 21 views
-4

-I有兩個字符串(非空格):C#_How兩個字符串之間乘元素

string input1 = "bike2car5ship86plan3"; 
string input2 = "car382bike50ship92yoyo2"; 

-I've試圖正則表達式Match的LINQ,但我的結果是不像希望:

- 如何讓他們這樣的結果:

Bike  2 x 50 = 100 
Car  5 x 382 = 1910 
Ship  86 x 92 = 7912 
----------------------------- 
Total     = 9922 

注:plan3yoyo2出現input1input2所以他們不進入書面結果。

+1

您嘗試了什麼以及您的問題在哪裏? –

+2

爲什麼'汽車5×38 = 190',而不是'汽車5×382 = 1910'? –

+0

「我試過Matches和LinQ」請發佈這些嘗試,我們可以從那裏開始 –

回答

2

使用的LINQ正則表達式,像這樣嘗試:

string input1 = "bike2car5ship86plan3"; 
string input2 = "car382bike50ship92yoyo2"; 

var inputs1 = Regex 
    .Matches(input1, "([a-zA-Z]+)([0-9]+)") 
    .OfType<Match>() 
    .ToDictionary(match => match.Groups[1].Value, 
       match => int.Parse(match.Groups[2].Value)); 

var inputs2 = Regex 
    .Matches(input2, "([a-zA-Z]+)([0-9]+)") 
    .OfType<Match>() 
    .ToDictionary(match => match.Groups[1].Value, 
       match => int.Parse(match.Groups[2].Value)); 

TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo; 

var data = inputs1 
    .Where(pair => inputs2.ContainsKey(pair.Key)) 
    .OrderBy(pair => pair.Key) 
    .Select(pair => new { 
    Name = textInfo.ToTitleCase(pair.Key), 
    Quantity = pair.Value, 
    Price = inputs2[pair.Key], 
    Total = pair.Value * inputs2[pair.Key], }) 
    .ToArray(); 

string table = string.Join(Environment.NewLine, data 
    .Select(item => string.Format("{0,-5} {1,3} x {2,3} = {3,4}", 
    item.Name, item.Quantity, item.Price, item.Total))); 

string result = string.Join(Environment.NewLine, 
    table, 
    new string('-', 25), 
    string.Format("Total = {0}", data.Sum(pair => pair.Total))); 

Console.Write(result); 

結果:

Bike 2 x 50 = 100  
    Car  5 x 382 = 1910  
    Ship 86 x 92 = 7912  
    ------------------------- 
    Total = 9922 
+0

謝謝大家!我現在就試試。你總是回答我的問題! –

+0

執行我。我得到這個錯誤: '$「{item.Name,-5} {item.Price,3} x {item.Quantity,3} = {item.Total,4}」));' '$「Total = {data.Sum(pair => pair.Total)}「);' - 意外字符'$' - 無效表達式')' 我添加了庫文件LINQ,REGEX和Globalization。 –

+1

@阮阮:啊!你沒有** C#6.0 **,讓我把它改成'string.Format()':'$「Total = {data.Sum(pair => pair.Total)}'' - >'string。格式(「Total = {0}」,data.Sum(pair => pair.Total))' –

2

這是簡單的正則表達式,但你必須這樣做,在多個步驟:

  1. separate 字+數字
  2. 的每次出現分離
  3. 比較和繁殖的結果

第1步:

爲正則表達式,你可以使用"[a-zA-Z]*\d*"

[a-zA-Z]*允許任意數量的字符後跟數字(\d*

到步驟2:

可以數從名稱也與正則表達式中分離("\d*"

到步驟3:

可以從第一個字符串添加匹配像的字典:

myDictionaryForString1.Add(name, value);

,然後乘以值與第二個字符串的值(與第一個字符串獲取值的過程相同):

if (myDictionaryForString1.ContainsKey(name)) { 
    myResultDictionary.Add(name, myDictionaryForString1[name] * value); 
} 
+0

第一次我只是可以編碼你的step1和step2。我會嘗試第3步。我是一個開始,所以他們可以花2周時間:D謝謝你! –

相關問題