【问题标题】:Check if the string contains all the characters from a to z [closed]检查字符串是否包含从 a 到 z 的所有字符 [关闭]
【发布时间】:2017-08-27 20:28:41
【问题描述】:

我必须编写一个 C# 代码来检查一个字符串是否包含从 a 到 z 的所有字母。“这是一个测试”(不带引号)。它不包含从 a 到 z 的所有字母,因此输出为否。 “abcdefghijklmnopqrstuvwxyz”。它包含从 a 到 z 的所有字母,因此输出为 yes。

【问题讨论】:

  • 你已经尝试了什么?
  • 到目前为止您尝试过什么?你到底想要什么?你试过循环遍历所有字符吗?
  • Stack Overflow 不是免费的代码编写服务。您应该尝试自己编写代码。在进行更多研究后,如果您遇到问题,您可以发布您尝试过的内容,并明确说明哪些内容不起作用并提供Minimal, Complete, and Verifiableexample。我建议阅读How to Ask a perfect question. 另外,请务必阅读the tour
  • 试试吧!如果您遇到困难(我不明白为什么),我们会提供帮助。见stackoverflow.com/help/how-to-ask

标签: c#


【解决方案1】:

我会用HashSets 来做:

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 =&gt; char.ToLower(ch))

【讨论】:

    【解决方案2】:

    这是我的处理方法,初始化一个包含每个字母的数组:

    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();}
    

    这应该可以解决问题!

    【讨论】:

    • 您在创建数组时忘记了new
    • 我的错,好地方
    【解决方案3】:

    你可以使用这样的扩展方法

    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
    

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2012-10-04
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 2019-03-16
      • 2018-03-16
      • 2012-12-27
      • 2010-11-02
      相关资源
      最近更新 更多