2013-07-15 181 views
0

我想刪除兩個給定字符串之間匹配的字符。例如。刪除兩個字符串之間的匹配字符

string str1 = "Abbbccd"; 
string str2 = "Ebbd"; 

從這兩個字符串欲作爲輸出:

"Abcc",只有那些許多匹配的字符應當從STR1,其存在於STR2除去。

我嘗試下面的代碼:

public string Sub(string str1, string str2) 
    { 
     char[] arr1 = str1.ToCharArray(); 
     char[] arr2 = str2.ToCharArray(); 

     char[] arrDifference = arr1.Except(arr2).ToArray(); 
     string final = new string(arrDifference); 

     return final; 
    } 

有了這個代碼,我得到的輸出"Ac"。它刪除兩個數組之間的所有匹配字符並僅存儲一次「c」。

回答

3

首先創建這個輔助方法:

IEnumerable<Tuple<char, int>> IndexDistinct(IEnumerable<char> source) 
{ 
    var D = new Dictionary<char, int>(); 
    foreach (var c in source) 
    { 
     D[c] = D.ContainsKey(c) ? (D[c] + 1) : 0; 
     yield return Tuple.Create(c, D[c]); 
    } 
} 

它把一個字符串 「aabcccd」 設置爲[(A,0),(A,1),(B,0),(C,0), (C,1),(C,2),(d,0)]。這個想法是通過在等號字符上添加一個計數索引來使每個字符不同。

然後修改你這樣的建議功能:

string Sub(string str1, string str2) 
{ 
    return new string(
     IndexDistinct(str1) 
      .Except(IndexDistinct(str2)) 
      .Select(x => x.Item1) 
      .ToArray()); 
} 

現在你是在Tuple<char, int>,而不是僅僅做charExcept,你應該得到你所指定的行爲。

+0

感謝很多答案。我會試試這個。 – RahulD

+1

非常好。它完美的作品。非常感謝。 :) – RahulD

0

使用C#的字符串命令來修改字符串。

public string testmethod(string str1, string str2) 
    { 
     string result = str1; 
     foreach (char character in str2.ToCharArray()) 
     { 
      result = result.Replace(character.ToString(), ""); 
     } 

     return result; 
    } 
+0

感謝您的輸入。我試過這段代碼,它解決了我的一個問題,並按預期存儲了'c'兩次,但它刪除了所有'b',並將輸出作爲「Acc」而不是「Abcc」。 :) – RahulD

+0

啊,職位很重要。那麼,這將改變實施。對不起,遺漏了這些細節。我會修改它。 – Craig

3

你可以用列表做得一樣好:

List<char> one = new List<char>("Abbbccd".ToCharArray()); 
    List<char> two = new List<char>("Ebbd".ToCharArray()); 
    foreach (char c in two) { 
     try { one.RemoveAt(one.IndexOf(c)); } catch { } 
    } 
    string result = new string(one.ToArray()); 
+0

非常感謝。精確和工作。 :) – RahulD

相關問題