c# - Cómo forzar la entrada del usuario a minúsculas o cualquier otra forma de hacer que la entrada del usuario no distinga entr

CorePress2024-01-25  12

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

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare