Esta pregunta ya tiene respuestas aquí:
¿Cómo puedo hacer una comparación de cadenas que no distinga entre mayúsculas y minúsculas?
(9 respuestas)
Cerrado
hace 2 años
.
Pregunta rápida. Nuevo en C# y como práctica, hice un juego de adivinanzas simple, pero intenté que las adivinanzas no distinguieran entre mayúsculas y minúsculas. En el siguiente ejemplo, la palabra secreta = "vaca", pero quiero "Vaca" ohr "VACA" para ser también aceptado.
Intenté forzar la variable de estimación a minúsculas usando adivinar.ToLower(); , Pero no está funcionando. ¿Alguna sugerencia o alternativa?
Gracias a todos. Muy apreciado,
Rory
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SecretWord
{
class Program
{
static void Main(string[] args)
{
string secretWord = ("cow");
string guess = "", hint0 = "It's an animal!", hint1 = "Some of us have black and white coats!", hint2 = "You can often find me on a farm!", hint3 = "Moo!";
guess.ToLower();
int guesscount = 1;
while (guess != secretWord && guesscount != 5)
{
if (guesscount == 1)
{
Console.WriteLine($"Guess the secret word! {hint0}");
Console.Write("Enter a guess: ");
guess = Console.ReadLine();
guess.ToLower();
if (guess == secretWord)
{
break;
}
else
{
Console.WriteLine($"3 more tries. Here is a hint: {hint1}.");
}
}
if (guesscount == 2)
{
Console.Write("Enter a guess: ");
guess = Console.ReadLine();
if (guess == secretWord)
{
break;
}
else
{
Console.WriteLine($"2 more tries. Here's another hint: {hint2}.");
}
}
if (guesscount == 3)
{
Console.Write("Enter a guess: ");
guess = Console.ReadLine();
if (guess == secretWord)
{
break;
}
else
{
Console.WriteLine($"One last try and one last hint: {hint3}.");
}
}
if (guesscount == 4)
{
Console.Write("Enter a guess: ");
guess = Console.ReadLine();
if (guess == secretWord)
{
break;
}
else
{
Console.Write($"Too bad! ");
}
}
guesscount = guesscount + 1;
};
if (guess == secretWord)
{
Console.WriteLine("You win!");
}
else
{
Console.Write("Better luck next time!");
}
Console.ReadKey();
}
}
}
También puedes votar la respuesta aceptada :)
- Salahuddin Ahmed
21 de abril de 2021 a las 10:46
YoAparentemente no tengo una reputación lo suficientemente alta... Una vez que la tenga, la tendré. Gracias de nuevo.
– Ruairí
22/04/2021 a las 15:38
¡Ah! está bien, muchas gracias :)
- Salahuddin Ahmed
22/04/2021 a las 16:16
------------------------------------
Las cadenas en C# son inmutables, lo que significa que no se pueden cambiar. Siempre que quieras cambiar una cadena, estás creando una cadena NUEVA.
Observe que el método ToLower() rEvuelve una cadena. Esto significa que tomará su cadena actual y le devolverá una nueva que está completamente baja. Sin embargo, de forma predeterminada, su variable original no ha sido modificada.
Para mostrar esto más claramente, intente hacer esto:
var guessToLower = guess.ToLower()
Verás que adivinaToLower tiene la estimación todo en minúsculas, pero la variable de estimación no ha sido modificada.
Entonces, para mantener su código prácticamente igual, lo que querrá hacer es asignar la nueva cadena de ToLower nuevamente a su variable de estimación. Se verá así:
guess = guess.ToLower();
La otra opción es no hacer ToLower() y en su lugar usar el método .Equals y decirle que ignore mayúsculas y minúsculas (como ha demostrado Alexandru).
2
Gracias. Esta es una explicación muy clara que me ayuda a comprender lo que realmente está sucediendo. ¡Muchas gracias por tomar el esfuerzo de explicar con tanto detalle! Lo probaré ahora :)
– Ruairí
28/03/2021 a las 13:10
¡No hay problema! No olvides marcar esto como respondido para que no permanezca abierto.
- Lolop
28 de marzo de 2021a las 23:54
------------------------------------
Puede utilizar la condición de la siguiente manera:
if(String.Equals(guess, secretWord, StringComparison.OrdinalIgnoreCase))
{
}
Instead of it:
if(guess == secretWord)
{
}
1
Muchas gracias. Esto también funcionó. Muy apreciado.
– Ruairí
28/03/2021 a las 13:12
------------------------------------
FÁCIL:
if (guess.Equals(secretWord, StringComparison.OrdinalIgnoreCase))
0