Bijay Ojha Bijay Ojha - 1 month ago 20
ASP.NET (C#) Question

Counting number of vowels in a string

I have a textbox where the user enters a random string. I want to count the number of vowels(A,E,I,O,U) in the string and show th results in the labelcontrol.

protected void Button1_Click(object sender, EventArgs e)
{
string EnterString;
EnterString = TextBox1.Text;
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;
char ch6 = 'A';
char ch7 = 'E';
char ch8 = 'I';
char ch9 = 'O';
char ch10 = 'U';

int countA = 0;
int countE = 0;
int countI = 0;
int countO = 0;
int countU = 0;

//const string vowels = "aeiou";
/* return value.Count(chr => vowels.Contains(char.ToLower(chr)));
return Value.Count()*/
int j = counta + counte + counti + counto + countu + countA + countE + countI + countO + countU;

foreach (char v in EnterString)
{
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++; }
}
foreach (char v in EnterString)
{
if (v == ch6) { countA++; j++; }

else if (v == ch7) { countE++; j++; }

else if (v == ch8) { countI++; j++; }

else if (v == ch9) { countO++; j++; }

else if (v == ch10) { countU++; j++; }
}

Label1.Text = j.ToString();
}

Answer

You have this in your code:

const string vowels = "aeiou";
return value.Count(chr => vowels.Contains(char.ToLower(chr)));

That works, at least if your culture is US. So no idea why you commented it out in favor of the current monstrosity.

On a Turkish locale it will fail because the lower case of I is not i but ı (undotted). So if you define vowels as aeiouAEIOU you should use ToLowerInvariant.

But if you want to include other vowels (like Ä) I have no idea how to do that except by listing all the characters.

Full implementation:

int CountVowels(string value)
{
    const string vowels = "aeiou";
    return value.Count(chr => vowels.Contains(char.ToLowerInvariant(chr)));
}

Looks like you got the good code part from: Counting vowels using switch