代码之家  ›  专栏  ›  技术社区  ›  dnclem

C检查字符串数组中是否包含任何匹配项

  •  11
  • dnclem  · 技术社区  · 14 年前

    在C中,检查字符串是否包含任何匹配项的最快方法是什么?我可以用一个循环来完成,但我认为这太慢了。

    5 回复  |  直到 14 年前
        1
  •  4
  •   Brent Arias    14 年前

    您可以将字符串与regex或语句结合起来,然后“一次完成”,但从技术上讲,regex仍然会在内部执行循环。最终,循环是必要的。

        2
  •  21
  •   Esteban Araya    14 年前

    使用LINQ:

     return array.Any(s => s.Equals(myString))
    

    当然,你可能想考虑文化和案例,但这是一般的想法。 此外,如果平等不是你所说的“匹配”的意思,你可以一直你需要使用的功能为“匹配”。

        3
  •  12
  •   SomeRandomProgrammer    11 年前

    我真的不能告诉你这是不是绝对是最快的方法,但我通常这样做的方法之一是:

    这将检查字符串是否包含数组中的任何字符串:

    string[] myStrings = { "a", "b", "c" };
    string checkThis = "abc";
    
    if (myStrings.Any(checkThis.Contains))
    {
        MessageBox.Show("checkThis contains a string from string array myStrings.");
    }
    

    要检查字符串是否包含数组的所有字符串(元素),只需更改 myStrings.Any 在if语句中 myStrings.All .

    我不知道这是什么类型的应用程序,但我经常需要使用:

    if (myStrings.Any(checkThis.ToLowerInvariant().Contains))
    

    因此,如果您正在检查用户输入,则无需考虑用户是否以大写字母输入字符串,使用toLowerinvariant()可以很容易地将其颠倒。

    希望这有帮助!

        4
  •  6
  •   dgilperez    10 年前

    这对我来说很好:

    string[] characters = new string[] { ".", ",", "'" };
    bool contains = characters.Any(c => word.Contains(c));
    
        5
  •  1
  •   Joe White    14 年前

    如果“数组”永远不会更改(或只是很少更改),并且您将有许多输入字符串正在对其进行测试,那么您可以构建一个 HashSet<string> 从数组中。 HashSet<T>.Contains 是O(1)操作,而不是O(n)循环。

    但构建哈希集需要一些(小)时间。如果数组经常改变,那么循环是唯一可行的方法。