检查字符串列表中元音的最简单方法

时间:2015-04-09 13:03:12

标签: c# string list

我有代码

List<String> words

目前在列表中只有2个计数单词:[0]“abc”,[1]“abc”

通过列表并检查这些单词中是否存在元音的最简单方法是什么?

4 个答案:

答案 0 :(得分:1)

您可以使用LINQ查找包含元音的所有单词的列表。

string vowels = "aeiou";
List<string> words = new List<string>() { "apple", "crypt" };
List<string> wordsWithVowels = words.Where(w => w.ToArray().Intersect(vowels.ToArray()).Count() > 0).ToList();

OR

List<string> wordsWithVowels = words.Where(w => w.ToArray().Any(c => vowels.ToArray().Contains(Char.ToLower(c)))).ToList();

使用Char.ToLower区分大小写

答案 1 :(得分:1)

public class VowelChecker
{
    private char[] vowels = new [] { 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U' };

    public bool ContainsVowel(string word)
    {
        foreach (char vowel in vowels)
        {
            if (word.Contains(vowel))
            {
                return true;
            }
        }
        return false;
    }
}

用法:

List<string> words = new List<string>();
words.Add("ABC");
words.Add("elephant");
words.Add("FLY");

VowelChecker checker = new VowelChecker();
foreach (string word in words)
{
    Console.WriteLine("{0} contains a vowel: {1}", word, checker.ContainsVowel(word));
}

Console.ReadLine();

结果:

enter image description here

答案 2 :(得分:0)

这个问题很容易以各种方式解决......唯一重要的是要知道并非所有地方的小写到大写的转换都是一样的......见http://blog.codinghorror.com/whats-wrong-with-turkey/(开始从字符串开始变得毛茸茸的

简而言之,在土耳其,i的大写字母为İ,而I的小写字母为ı。看到不同? : - )

string vowels = "aeiou";
List<string> words = new List<string>() { "APPLE", "crypt" };
List<string> wordsWithVowels = words.Where(w => vowels.Any(v => w.IndexOf(v.ToString(), StringComparison.CurrentCultureIgnoreCase) != -1)).ToList();

或者甚至可能更迂腐正确

CompareInfo comparer = new CultureInfo("en-US").CompareInfo;
List<string> wordsWithVowels = words.Where(w => vowels.Any(v => comparer.IndexOf(w, v, CompareOptions.IgnoreCase) != -1)).ToList();

(其中en-US是你正在寻找元音的语言)

有非常好的方法可以进行不区分大小写的比较,因此使用ToLower() / ToUpper()来执行它们是错误的错误。

正如我评论的那样,这可能没有实际意义,因为元音的概念是语言连接的,所以在土耳其他们有不同的元音。

请注意,即使是英文,有时y也是元音(请参阅wiki

答案 3 :(得分:0)

这感觉就像是作业,但我很无聊。

public int CountVowels(List<string> words)
{
    return words.Sum(CountVowels);
}

public int CountVowels(string word)
{
    return Enumerable.Range(0, word.Length).Count(i => IsVowel(word, i));
}

public bool IsVowel(string word, int i)
{
    if (i < 0) return false;
    if (i >= word.length) return false;

    switch(word[i].ToLowerCase())
    {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            return true;
        case 'y':
            // I'm pretty sure 'y' is a consonant if it follows, 
            // or is followed by a vowel
            return !(IsVowel(word, i-1) || IsVowel(word, i+1));
    }

    return false;
}