如何使用 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;
}
}
让i
是input
的索引,从零开始
让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
我尝试使用不同的东西来打印给定的元音 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;
}
}
让i
是input
的索引,从零开始
让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