使用开关计数元音

tin*_*tes 2 c# switch-statement

我试图设计一个程序来计算句子中的元音.

在我的代码中,我在foreach语句中使用了一个if/else if语句.我想使用switch语句转换这些代码行,但我不确定要去哪里.我需要添加新方法吗?我很感激你的帮助.

这是我到目前为止所尝试的:我检查过这个是非常错误的.在case 1例如需要有一个常数.我不确定我在这里使用什么常数.

foreach (char v in yourSentence)
{
    switch (v)
    {
    case 1: 
        (v==ch1); 
        counta++; 
        j++; 
        break;

    case 2: 
        (v==ch2); 
        counte++; 
        j++; 
        break;
    case 3: 
        (v==ch3); 
        counti++; 
        j++; 
        break;
    case 4: 
        (v==ch4); 
        counto++; 
        j++; 
        break;
    case 5: 
        (v==ch3); 
        counti++; 
        j++; 
        break;             
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个问题:我试图改变listBox中显示文本的颜色.这可能有不同的颜色吗?我在这里尝试的是前5(listBox1.Items.Add)是紫罗兰.并且(listBox1.Items.Add)的总和是蓝色的.但它似乎没有改变.我在这里错过了什么吗?

private void btnCount_Click(object sender, EventArgs e)
{
    string yourSentence;
    yourSentence = textBoxVowels.Text.ToLower().Trim();

    char ch1 = 'a';
    char ch2 = 'e';
    char ch3 = 'i';
    char ch4 = 'o';
    char ch5 = 'u';

    int counta = 0;
    int counte = 0;
    int counti = 0;
    int counto = 0;
    int countu = 0;

    int j = counta + counte + counti + counto + countu;



    foreach (char v in yourSentence)
    {
        if (v == ch1) { counta++; j++; }

        else if (v == ch2) { counte++; j++; }

        else if (v == ch3) { counti++; j++; }

        else if (v == ch4) { counto++; j++; }

        else if (v == ch5) { countu++; j++; }
    }

    listBox1.Items.Add("There are " + counta.ToString().Trim() + " a's in the sentence");
    listBox1.Items.Add("There are " + counte.ToString().Trim() + " e's in the sentence");
    listBox1.Items.Add("There are " + counti.ToString().Trim() + " i's in the sentence");
    listBox1.Items.Add("There are " + counto.ToString().Trim() + " o's in the sentence");
    listBox1.Items.Add("There are " + countu.ToString().Trim() + " u's in the sentence");
    listBox1.Font = new Font("Arial", 12, FontStyle.Bold);
    listBox1.ForeColor = Color.Violet;

    listBox1.Items.Add("There are " + j.ToString().Trim() + " vowels in the sentence");
    listBox1.ForeColor = Color.Blue;
}


private void btnClear_Click(object sender, EventArgs e)
{
    textBoxVowels.Text = null;
    listBox1.Items.Clear();
}
Run Code Online (Sandbox Code Playgroud)

Nol*_*rin 9

或者通过使用一些LINQ来简化整个问题.:)

public static int CountVowels(this string value)
{
    const string vowels = "aeiou";
    return value.Count(chr => vowels.Contains(char.ToLower(chr)));
}
Run Code Online (Sandbox Code Playgroud)

Count扩展方法是特别适合于该任务.另外,请注意使用一串所有元音来检查每个字符 - 比switch语句简单得多.

注意:似乎我错过了你想要单独计算每个元音的事实.在这种情况下,LINQ变得有点复杂(至少如果你想有效地做到这一点),但我会把它作为练习给你.无论如何,switch语句可能是学习C#基础知识的好方法.


由于您可能对switch语句感到好奇,因此以下代码使用了正确的语法:

foreach (var chr in sentence)
{
    switch (chr) 
    {
        case 'a':
            ...
            break;
        case 'e':
            ...
            break;
        case 'i':
            ...
            break;
        case 'o':
            ...
        case 'u':
            ...
            break;
     }
}
Run Code Online (Sandbox Code Playgroud)


M4N*_*M4N 5

我想你误解了'开关/案例'是如何工作的.只需将它们更改为:

case 'a': 
     counta++; 
     j++; 
     break;
Run Code Online (Sandbox Code Playgroud)

Case需要一个应与当前字符进行比较的常量值.