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