检查字符串是否包含a到z中的所有字符

时间:2017-04-03 04:54:52

标签: c#

我必须编写一个C#代码来检查一个字符串是否包含从a到z的所有字母表。"这是一个测试" (没有引号)。它不包含从a到z的所有字母表,因此输出为no。  " ABCDEFGHIJKLMNOPQRSTUVWXYZ&#34 ;.它包含从a到z的所有字母表,因此输出为是。

3 个答案:

答案 0 :(得分:1)

以下是我如何处理它,初始化包含每个字母的数组:

char[] letters = new []{"a","b","c"...};

然后初始化一个列表以保存字符串中的所有字母:

List<char> lettersInString = new List<char>();

现在遍历你的字符串添加不同的字母:

foreach (char letter in myString){if (!lettersInString.Contains(char)){lettersInString.Add(char);}}

最后,查看列表是否包含每个字母:

if (letters.All(letter=>lettersInString.Contains(letter)){DoSomething();}

这应该可以做到!

答案 1 :(得分:0)

我会用HashSet s:

来做
bool HasAllLeters(string input) 
{
    var lettersInInput = new HashSet<char>(input); // or `input.ToLower()` for case insensitiveness
    var alphabet = new HashSet<char>("abcdefghijklmnopqrstuvwxyz"); // you can actually store this as a `private static readonly` field for performance 
    return alphabet.IsSubsetOf(lettersInInput);
} 

我使用IsSubsetOf而非Equals,因为输入可能包含不是字母的字符,例如标点符号。

编辑:我刚注意到input.ToLower()分配了整个字符串。所以请改用input.Select(ch => char.ToLower(ch))

答案 2 :(得分:0)

您可以使用像这样的扩展方法

public static class StringExtensions
{
    private static char[] _alphabet;

    static StringExtensions()
    {
        _alphabet = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
    }

    public static bool ContainsAlphabet(this string input)
    {
        return !_alphabet
            .Except(new HashSet<char>(input))
            .Any();
    }
}

"asdasd".ContainsAlphabet(); //false
"abcdeffffghijklmnopqrstuvwxyzzz".ContainsAlphabet(); //true