c# - 如何使用 IndexOf 和 Substring 列出句子中以元音开头的单词。(C#)
问题描述
我尝试使用不同的东西来打印给定句子中的元音。我无法弄清楚。
Console.WriteLine("请输入一句话"); 字符串名称 = 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
获取第一个索引空间以获取单词结尾。从...开始i
让str
成为一个来自子字符串的单词。如果k
可以获得位置(又名!= -1),则使用 starti
和 length剪切输入k-1
。否则当 时k=-1
,str
会一直到句尾(也就是句子的最后一个词)
i=k+1
因为忽略空间而更新新的
循环直到得到正确的元音
k==-1
言归正传,没有更多的去所以阻止它。
带字符串的结果An ugly cat sleeps in the sofa and beside umbrella
推荐阅读
- python - np.sum 不返回精确的总和
- reactjs - 带有 Hooks 的地图函数中的 OnChange 更新所有字段
- javascript - 我如何从 jquery 替换为原生 Js
- mongodb - 如何正确使用 setDefaultsOnInsert
- spring - Spring boot - bootstrap 和 thymeleaf 排序表
- python - 使用 python 请求登录 django 站点适用于 localhost (127.0.0.1:8000) 而不是 https://hosted-site.com
- ruby-on-rails - 如果字段名称相同,如何在 Rails 中使用嵌套表单?
- reactjs - How can I pass event properties to a customEvent using React Testing Library?
- node.js - 文件系统一次替换多个字符串?
- git - 在编写 git difftool 时,该工具有没有办法知道正在比较哪个文件?