正在删除两个字符串之间的匹配字符
本文关键字:之间 字符串 字符 两个 删除 | 更新日期: 2023-09-27 18:22:32
我想删除两个给定字符串之间匹配的字符。例如
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"。
首先创建这个辅助方法:
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>
上执行Except
,而不仅仅是char
,您应该得到您指定的行为。
您也可以使用列表来完成:
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());
使用C#的字符串命令修改字符串。
public string testmethod(string str1, string str2)
{
string result = str1;
foreach (char character in str2.ToCharArray())
{
result = result.Replace(character.ToString(), "");
}
return result;
}