Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#检查两个字符串是否包含相同的字符_C#_String_Compare - Fatal编程技术网

c#检查两个字符串是否包含相同的字符

c#检查两个字符串是否包含相同的字符,c#,string,compare,C#,String,Compare,我创建了3个字符串: string a = "abcdgfg"; string b = "agbfcd"; string c = "axcvn"; 我想创建以下支票,但找不到如何创建: 需要检查字符串a和字符串b中是否有相同的latter(不要在意顺序,或者如果后者显示多次,只需要检查两个字符串上是否出现相同的latter)。 然后我需要对字符串a和字符串c执行相同的检查 正如您所看到的:字符串a和字符串b具有相同的Latter,字符串a和字符串c没有 在我做了检查后,我只需打印一个按摩,如果

我创建了3个
字符串

string a = "abcdgfg";
string b = "agbfcd";
string c = "axcvn";
我想创建以下支票,但找不到如何创建: 需要检查
字符串a
字符串b
中是否有相同的latter(不要在意顺序,或者如果后者显示多次,只需要检查两个字符串上是否出现相同的latter)。 然后我需要对
字符串a
字符串c
执行相同的检查

正如您所看到的:
字符串a
字符串b
具有相同的Latter,
字符串a
字符串c
没有

在我做了检查后,我只需打印一个按摩,如果字符串有相同的或没有后者

有人能告诉我怎么做支票吗

编辑

勾选“a”和“c”后,o应打印出现的第一个后一个,并且“a”和“c”之间不匹配

谢谢

我建议使用a,它是:

顺便说一句,这也可以取代
SetEquals
检查:

aSet.SymmetricExceptWith(bSet); // removes all characters which are in both
if (aSet.Any())                 // missing charaters in one of both strings
{
    Console.WriteLine("First letter that is either in a and not in b or in b and not in a: " + aSet.First()); 
}

使用
+
任何
之外的原始答案有一个微妙的错误。如果存在重复项,则检查长度是不够的。因此,您需要从两个方向进行检查,或者首先使用
Distinct
。与作为O(n)操作的
HashSet.SetEquals
-方法相比,这两种方法效率都很低

bool abSame = !a.Except(b).Any() && !b.Except(a).Any();
需要检查字符串a和字符串b中是否有相同的latter(不要在意顺序,或者如果后者显示多次,只需要检查两个字符串上是否出现相同的latter)

您可以这样做:

bool same = a.Distinct().OrderBy(c => c)
           .SequenceEqual(b.Distinct().OrderBy(c => c));

这只是对两个字符串的字符进行排序,并检查两个有序序列是否相等。你可以对
a
c

使用相同的方法,那么“或者如果后者显示了不止一次”位呢?效率有点低,不是吗?@TimSchmelter对于大字符串,可能是:)你的第一个想法奏效了,我建议使用字符串扩展,而不是使用HashSet(我甚至都不熟悉)。可以在没有长度检查的情况下思考你的第一个想法(因为你说它有bug)。。。我也写了我的第一篇文章,你也能帮我吗?:)@user3396397:仅当您使用
时它才有效!除了两侧的+任何
,长度检查是不够的。考虑A是<代码>“AAA”< /代码>和B<代码>“AB”< /代码>。code>HashSet.SetEquals可读性更强,效率更高。现在我了解了
HashSet
的功能,这对我来说很好,谢谢:)你能帮我做一下eddit吗?在勾选“a”和“c”之后,它应该打印出现的后一个,并且“a”和“c”之间不匹配@user3396397:我已经编辑了我的答案。您可以使用
SymmetricExceptWith
查找两个字符串之一中缺少的所有字符。您甚至可以首先使用它,然后检查
aSet.Any()
。这将取代
SetEquals
检查。
private bool HaveSameLetters(string a, string b)
{       
     return a.All(x => b.Contains(x)) && b.All(x => a.Contains(x));
}
bool same = a.Distinct().OrderBy(c => c)
           .SequenceEqual(b.Distinct().OrderBy(c => c));
private bool HaveSameLetters(string a, string b)
{       
     return a.All(x => b.Contains(x)) && b.All(x => a.Contains(x));
}