如何使用 IndexOf 和 Substring 列出句子中以元音开头的单词。 (C#)

How do I use IndexOf and Substring to list words that start with vowels in a sentence. (C#)

我尝试使用不同的东西来打印给定的元音 sentence.I 无法弄清楚。

Console.WriteLine("Enter a sentence"); 字符串名称 = Console.ReadLine();

// 然后如果用户写(“她是一只猫,但她吃洋葱”) // 输出应该是 是 一个 吃 洋葱

元音字母是u,e,o,a,i 把句子拆分成单词循环查看即可,不用substring和indexof

    public static void MainFunc()
    {
        string sentence = "An ugly cat sleeps in the sofa";

        Console.WriteLine(string.Join(';', ShowVowelWords(sentence)));
    }

    static char[] VOWELS = new char[] { 'u', 'e', 'o', 'a', 'i' };

    public static IEnumerable<string> ShowVowelWords(string sentence)
    {
        foreach (var word in sentence.ToLower().Split(' '))
            foreach (var c in VOWELS)
                if (word.StartsWith(c))
                    yield return word;
    }

更新

如果只使用indexof和substring,求解时间会更长

    public static IEnumerable<string> ShowVowelWords2(string input)
    {
        int i = 0;
        while(true)
        {
            int k = input.IndexOf(' ', i);
            var str = (k != -1) ? input.Substring(i, k - i) : input.Substring(i);
            i = k + 1;

            foreach (var c in VOWELS)
                if (str[0] == c)
                {
                    yield return str;
                    break;
                }

            if (k == -1)
                break;
        }
    }

iinput的索引,从零开始

k得到第一个索引space得到单词结束。从 i

开始

str为子串的结果。如果 k 可以得到位置(aka != -1),则剪切起始 i 和长度 k-1 的输入。否则当 k=-1 时,str 会一直到句子结尾(也就是句子的最后一个词)

更新新的 i=k+1 因为忽略了 space

循环直到得到正确的元音

k==-1说到底就是了,不去了就罢了

结果为字符串 An ugly cat sleeps in the sofa and beside umbrella