找到字符串中的元音

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
你好,

所以我尝试制作一个句子作为句子的应用程序,然后找到该句子中的多少元音。但它失败了。

我尝试使用indexof函数,但它不能超过1个参数 - 这是垃圾,因为我们有多个元音。然后我试过传递给控制台的元音数量,但它是毫无意义的。

这是代码:

C#:
namespace VowelCounter
{
    class Program
    {
        static void Main(string[] args)
        {
            string userInput;
            Console.WriteLine("Enter a string: ");
            userInput = Console.ReadLine();
            string vowelsToFind = "a";
            int index = userInput.IndexOf('a');
            Console.WriteLine($"Found {vowelsToFind}, in {userInput}, at position {index}");
            Console.ReadKey();
        }
    }
}

谁能建议更好的方法来做到这一点?以及采取更多参数的方式?

谢谢
 

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
感谢你的回复。

我想保持尽可能简单。我还没有使用正则表达式,并不太了解它们是什么。

但我会做一些挖掘,看看我可以想出什么。谢谢你的反馈。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
没有必要使用索引来计算元音,因为根据您的要求,您不关心索引。字符串类实现了IEnumerable<char>界面使您可以使用“foreach”循环来枚举字符串中的字符,例如,
var vowelCount = 0;

foreach (var ch in myString)
{
    if (IsVowel(ch))
    {
        vowelCount++;
    }
}

我会把它留给你写这个是isvowel方法。
 

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
没有必要使用索引来计算元音,因为根据您的要求,您不关心索引。字符串类实现了IEnumerable<char>界面使您可以使用“foreach”循环来枚举字符串中的字符,例如,
var vowelCount = 0;

foreach (var ch in myString)
{
if (IsVowel(ch))
{
vowelCount++;
}
}

我会把它留给你写这个是isvowel方法。

这是我尝试编写ISVisible方法,然后尝试输出结果的代码:

C#:
void IsVowel()
            {
                char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
                string[] foundVowels;
                var vowelCount = 0;
                userInput.Contains(vowels);
                if (userInput.Contains(vowels))
                {
                    vowelCount++;
                }
            }






           
            foreach (var ch in userInput)
            {
                if (IsVowel(ch))
                {
                   // write the number of vowels 
                }
            }

这是一种雄心勃勃的尝试,但我的技能真的不是那么尖锐。我看着互联网,但每个人都想要一个字符。我想要一组被搜查。我没有运气。

任何指针?
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
那里有很多问题。首先,您的ISvoWel方法名称并使用,好像它将占用一个字符作为参数并返回BOOL,指示CHAR中传入的蜂扣是一个元音,但不会用CHAR参数声明,而不是声明返回BOOL并且实施是计数。该方法应该具有Char参数并返回BOOL。实现应以元音列表开始,然后返回一个bool,指示该列表是否包含传递的char。这是两行代码。只要您的循环是正确的,但它在该循环中,您应该递增计数,而不是在ISVOWEL方法中。

这就是尝试编写代码而不知道它的实际应该是什么。如果你只有一个模糊的最终结果的想法,那么你永远不会知道你写的是什么都在做它应该做的事情。例如,如果您开始清楚地了解了IsvoWel方法应该做的那样,那就明确说它并没有真正靠近它。例如,您应该知道您需要在编写任何代码之前返回BOOL,以便您可以查看它,并看到它不会返回BOOL并知道错误。为了有效,您需要在写作之前计划您的代码。
 

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
那里有很多问题。首先,您的ISvoWel方法名称并使用,好像它将占用一个字符作为参数并返回BOOL,指示CHAR中传入的蜂扣是一个元音,但不会用CHAR参数声明,而不是声明返回BOOL并且实施是计数。该方法应该具有Char参数并返回BOOL。实现应以元音列表开始,然后返回一个bool,指示该列表是否包含传递的char。这是两行代码。只要您的循环是正确的,但它在该循环中,您应该递增计数,而不是在ISVOWEL方法中。

这就是尝试编写代码而不知道它的实际应该是什么。如果你只有一个模糊的最终结果的想法,那么你永远不会知道你写的是什么都在做它应该做的事情。例如,如果您开始清楚地了解了IsvoWel方法应该做的那样,那就明确说它并没有真正靠近它。例如,您应该知道您需要在编写任何代码之前返回BOOL,以便您可以查看它,并看到它不会返回BOOL并知道错误。为了有效,您需要在写作之前计划您的代码。

非常感谢您的输入。在我开始编写代码之前,我肯定是正确的关于我无法计划 - 但我认为可能会更加缺乏编程技巧。

我确实尝试了另一个代码:

C#:
bool hasVowel;


            void IsVowel()
            {
                userInput.Contains("a") 


                if (userInput.Contains(vowels))
                {
                    vowelCount++;
                }


                return hasVowel;
            }

我致力于学习,但如果我没有越来越近,让我们忘记这种情况,我稍后会回到这条线上。

感谢您的帮助
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
在编写代码之前,这是我对规划的意思。这是我的原始代码片段:
var vowelCount = 0;

foreach (var ch in myString)
{
    if (IsVowel(ch))
    {
        vowelCount++;
    }
}
在该代码中,ISVOWEL方法正在接收一个字符作为参数,这意味着它必须具有char参数,并且它被用作“if”语句的主题,这意味着它必须返回bool:
bool IsVowel(char ch)
{
    bool result;

    // ...

    return result;
}
可以通过观察和分析方法的使用来简单地写入该代码。现在考虑这样一种方法需要实际做些什么。它收到了一个字符,需要确定该炭是否是元音。有多个元音,所以它们可以被写为列表,因此您想知道指定的字符是否包含在这样的元音列表中。因此,创建元音列表并检查它是否包含指定的CHAR是有意义的:
bool IsVowel(char ch)
{
    bool result;
    var vowels = new [] {'a', 'e', 'i', 'o', 'u'};

    result = vowels.Contains(ch);

    return result;
}
因为我们在编写该代码之前进行了一个计划,我们现在可以查看代码并检查它是否实际实现计划,如果没有,我们知道代码是错误的,需要更改,假设我们有开始的声音计划。然后可以简化该代码:
bool IsVowel(char ch)
{
    var vowels = new [] {'a', 'e', 'i', 'o', 'u'};

    return vowels.Contains(ch);
}
这只会找到小写的元音,但我会把休息留给你。
 
Last edited:

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
在编写代码之前,这是我对规划的意思。这是我的原始代码片段:
var vowelCount = 0;

foreach (var ch in myString)
{
if (IsVowel(ch))
{
vowelCount++;
}
}
在该代码中,ISVOWEL方法正在接收一个字符作为参数,这意味着它必须具有char参数,并且它被用作“if”语句的主题,这意味着它必须返回bool:
char IsVowel(char ch)
{
bool result;

// ...

return result;
}
可以通过观察和分析方法的使用来简单地写入该代码。现在考虑这样一种方法需要实际做些什么。它收到了一个字符,需要确定该炭是否是元音。有多个元音,所以它们可以被写为列表,因此您想知道指定的字符是否包含在这样的元音列表中。因此,创建元音列表并检查它是否包含指定的CHAR是有意义的:
char IsVowel(char ch)
{
bool result;
var vowels = new [] {'a', 'e', 'i', 'o', 'u'};

result = vowels.Contains(ch);

return result;
}
因为我们在编写该代码之前进行了一个计划,我们现在可以查看代码并检查它是否实际实现计划,如果没有,我们知道代码是错误的,需要更改,假设我们有开始的声音计划。然后可以简化该代码:
char IsVowel(char ch)
{
var vowels = new [] {'a', 'e', 'i', 'o', 'u'};

return vowels.Contains(ch);
}
这只会找到小写的元音,但我会把休息留给你。

我开始掌握方法并返回值。我看看你的“初学者教程”,它很好地解释了它。

我可以理解,在最后一点代码中,您返回CH中的元音。但我不明白它是如何工作的?因为我收到一个错误,说我需要将bool的值转换为char。

我尝试了一些解决方案,但似乎有点奇怪。

然后我尝试使用tolower()函数将所有用户的输入转换为小写:

C#:
            string userInput;
            Console.WriteLine("Enter a string: ");
            userInput = Console.ReadLine(userInput.ToLower());

但似乎我需要将它推到写入编写过程中的小写。

我是否越来越靠近工作计划或漂流到它?我可以感受到学习,因为我已经把方法进行了测试(在你的帮助下)并学到了一些有趣的事情。

我只是想知道您在通过本书进一步前进之前要修补哪些区域的意见。

谢谢。
 
Last edited:

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
对不起,我现在已经设法混淆了问题。正如我在帖子中所说的那样,该方法必须返回BOOL,但我不小心声明了返回一个char的方法。我已经修复了我以前的帖子中的代码所以另一种外观,它可能更有意义。该方法没有返回在'ch'中的元音,而是返回bool,即'true'或'false',这指示'ch'是否包含在元音阵列中,即'ch'是一个元音。
 

Vitzzviperzz.

众所周知的成员
加入
2017年1月16日
消息
75
地点
英国
编程经验
1-3
对不起,我现在已经设法混淆了问题。正如我在帖子中所说的那样,该方法必须返回BOOL,但我不小心声明了返回一个char的方法。我已经修复了我以前的帖子中的代码所以另一种外观,它可能更有意义。该方法没有返回在'ch'中的元音,而是返回bool,即'true'或'false',这指示'ch'是否包含在元音阵列中,即'ch'是一个元音。


你好!

我设法这样做了!

检查代码:

C#:
namespace VowelCounter
{
    class Program
    {


        static bool IsVowel(char ch)
        {
            bool result;
            var vowels = new[] { 'a', 'e', 'i', 'o', 'u' };
            result = vowels.Contains(ch);


            return result;
        }


        static void Main(string[] args)
        {
            string userInput;
            Console.WriteLine("Enter a string: ");
            userInput = Console.ReadLine();
            var vowelCount = 0;


            foreach (var ch in userInput)
            {
                if (IsVowel(ch))
                {
                    vowelCount++;
                }
            }


            Console.WriteLine(vowelCount);


            Console.ReadKey();
        }
    }
}

在BOOL和CHAR替代之后,我所要做的就是使ISVOWEL方法成为静态并且它的工作。否则,(ISvowel(CH))将是状态和错误。

谢谢你的帮助JMPLHINNEY。
 
最佳 底部