2017-04-03 46 views
-4

我必須編寫一個C#代碼來檢查字符串是否包含從a到z的所有字母「這是測試」(不含引號)。它不包含從a到z的所有字母,所以輸出不是。 「abcdefghijklmnopqrstuvwxyz」。它包含從a到z的所有字母,因此輸出爲yes。檢查字符串是否包含從a到z的所有字符

+2

你有什麼已經嘗試過? –

+1

你到目前爲止嘗試過什麼?你想要什麼?你是否嘗試過循環所有角色? – Emad

+1

[Stack Overflow](https://stackoverflow.com)不是一個免費的代碼寫入服務。您應該嘗試自己編寫代碼。在做了更多研究之後,如果您遇到問題,您可以發佈您已經嘗試過的內容,並清楚說明哪些內容無法正常工作,並提供[最少,完整和可驗證](http://stackoverflow.com/help/) MCVE)的例子。我建議閱讀[如何問](http://stackoverflow.com/questions/how-to-ask)一個[完美的問題。](http://codeblog.jonskeet.uk/2010/08/29/writing-完美的問題/)另外,一定要採取[旅遊](http://stackoverflow.com/tour) –

回答

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

最後,看看列表是否包含每一列tter:

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

應該這樣做!

+0

您在陣列創建中忘記了'new'。 – vyrp

+0

我的錯誤,好點 –

0

我會HashSet做吧:

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))

相關問題