首页 > 解决方案 > 如何使用 IndexOf 和 Substring 列出句子中以元音开头的单词。(C#)

问题描述

我尝试使用不同的东西来打印给定句子中的元音。我无法弄清楚。

Console.WriteLine("请输入一句话"); 字符串名称 = Console.ReadLine();

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

标签: c#windowsvisual-studiosubstringindexof

解决方案


元音字母是 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;
        }
    }

i是 的索引input,从零开始

k获取第一个索引空间以获取单词结尾。从...开始i

str成为一个来自子字符串的单词。如果k可以获得位置(又名!= -1),则使用 starti和 length剪切输入k-1。否则当 时k=-1str会一直到句尾(也就是句子的最后一个词)

i=k+1因为忽略空间而更新新的

循环直到得到正确的元音

k==-1言归正传,没有更多的去所以阻止它。

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

在此处输入图像描述


推荐阅读