Esta es la solución más acertada que encomtrarás aportar, sin embargo mírala detenidamente y valora si se adapta a tu trabajo.
Solución:
En este momento, está comprobando si la oración como un todo contains
cualquier vocal, una vez para cada carácter. En su lugar, debe verificar los caracteres individuales.
for (int i = 0; i < sentence.Length; i++)
Dicho esto, puedes simplificar esto un poco:
static void Main()
int total = 0;
// Build a list of vowels up front:
var vowels = new HashSet 'a', 'e', 'i', 'o', 'u' ;
Console.WriteLine("Enter a Sentence");
string sentence = Console.ReadLine().ToLower();
for (int i = 0; i < sentence.Length; i++)
if (vowels.Contains(sentence[i]))
total++;
Console.WriteLine("Your total number of vowels is: 0", total);
Console.ReadLine();
Puede simplificarlo aún más si desea utilizar LINQ:
static void Main()
// Build a list of vowels up front:
var vowels = new HashSet 'a', 'e', 'i', 'o', 'u' ;
Console.WriteLine("Enter a Sentence");
string sentence = Console.ReadLine().ToLower();
int total = sentence.Count(c => vowels.Contains(c));
Console.WriteLine("Your total number of vowels is: 0", total);
Console.ReadLine();
Dado que Reed ha respondido a su pregunta, le ofreceré otra forma de implementar esto. Puede eliminar su ciclo usando expresiones LINQ y lambda:
string sentence = "The quick brown fox jumps over the lazy dog.";
int vowelCount = sentence.Count(c => "aeiou".Contains(Char.ToLower(c)));
Si no comprende este fragmento de código, le recomiendo buscar LINQ y Lambda Expressions en C#. Hay muchos casos en los que puede hacer que su código sea más conciso eliminando bucles de esta manera.
En esencia, este código dice "cuenta cada carácter de la oración que está contenido dentro del string "aeiou". "
Eso es porque su declaración if siempre es truenecesitas comparar el carácter en la oración[i]y ver si es una vocal, en lugar de ver si la oración contiene una vocal.