检查字符串上的每个字段是否都在另一个字符串中

时间:2014-02-26 21:46:47

标签: c# string

我需要比较一些字符串,并检查是否可以在另一个字符串中找到每个以空格分隔的字段。 字符串A上可能缺少某些字段,但无论如何字段的顺序都是相同的

示例:

String A: AAA CCC DDD    
String B: AAA BBB CCC DDD 

确定

String A: AAA CCC DDD    
String B: AAA BBB DDD 

不行

我将使用C#,但通用算法也可以。

3 个答案:

答案 0 :(得分:6)

您可以在空格中split两个字符串,然后使用Enumerable.Except检查是否有任何不匹配的元素。

if(stringA.Split().Except(stringB.Split()).Any())
{
  //extra elements present
}

答案 1 :(得分:0)

这是你在找什么?它检查源字符串中的每个部分是否在要比较的字符串中。

var sourceString = "AAA CCC DDD";
var compareTo = "AAA BBB CCC DDD";

sourceString.Split(' ').All(x=>compareTo.Contains(x));

答案 2 :(得分:0)

因此,如果我理解正确,只有当B包含与A相同的字段时,结果才为真,并且可选地在此处插入一些额外字段。在最坏的情况下,一个好的算法给出最多N步的答案,其中N是B中的字段数。

  • 将A和B分成字段数组,并将这些数组命名为FA和FB
  • 让ia和ib成为FA和FB字段数组的索引,并将两者初始化为零
  • 如果FA中的字段数大于FB中的字段数,则答案立即为假而不做任何事情
  • 在循环中运行以下内容,而ia未达到FA的长度:如果FA [ia] == FB [ib],则仅执行ia和ib。如果FA [ia]!= FB [ib]则仅步骤ib。如果你只步进ib然后检查FB是否仍然至少有剩余元素与FA一样多,因为如果FB剩余的元素较少,那么答案已经是假的(所以如果len(FB)-ib< len(FA)-ia那么答案是错误的)。如果你用你的ia迭代整个FA数组(并退出循环)并且你没有偶然发现导致错误返回值的条件,那么答案是真的。

伪代码:

FA = fields of A
FB = fields of B
if len(FB) < len(FA):
    return False
ia = 0
ib = 0
while ia < len(FA):
    if FA[ia] == FB[ib]:
        ia += 1
        ib += 1
    else:
        ib += 1
        if len(FB)-ib < len(FA)-ia:
            return False

# we finished with the loop, ia reached len(FA)
return True