none
Comparar Cadenas sin Importar el Orden. RRS feed

  • Pregunta

  • Hola buenos dias,tengo una tarea de comparar dos cadena de caracteres sin importar el Orden de los caracteres...

    Me explico

    String nombre1 = "Alejandro";

    String nombre2 = "dakejando";

    Es posible que pueda comparar las letras de una cadena con la de otra cadena?

    Quiero que el programa me diga si las letras que estan en la variable nombre1 son las mismas que estan en la variable nombre2.. sin importar el orden.

    Gracias.


    • Editado AleBeras martes, 27 de marzo de 2018 16:02
    martes, 27 de marzo de 2018 16:01

Respuestas

  • hola

    Eso me suena a un anagrama

    podrias validar si esto aplica

    Saber si una palabra es anagrama de otra

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta AleBeras martes, 27 de marzo de 2018 16:57
    martes, 27 de marzo de 2018 16:13
  • Hay varias formas, se me ocurre comparar la cantidad de apariciones de cada carácter en ambas cadenas, por ejemplo:

    string name1 = "alejandro";
    string name2 = "dalejanro";
    bool result = true;
    
    foreach (var item in name1)
    {
    	if (name1.ToLower().Count(x => x == item) != name2.ToLower().Count(x => x == item))
    	{
    		result = false;
    		break;
    	}
    }
    MessageBox.Show("Ambas cadenas son " + (result ? "iguales" : "distintas"));

    • Marcado como respuesta AleBeras martes, 27 de marzo de 2018 16:57
    martes, 27 de marzo de 2018 16:48

Todas las respuestas

  • hola

    Eso me suena a un anagrama

    podrias validar si esto aplica

    Saber si una palabra es anagrama de otra

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta AleBeras martes, 27 de marzo de 2018 16:57
    martes, 27 de marzo de 2018 16:13
  • Hay varias formas, se me ocurre comparar la cantidad de apariciones de cada carácter en ambas cadenas, por ejemplo:

    string name1 = "alejandro";
    string name2 = "dalejanro";
    bool result = true;
    
    foreach (var item in name1)
    {
    	if (name1.ToLower().Count(x => x == item) != name2.ToLower().Count(x => x == item))
    	{
    		result = false;
    		break;
    	}
    }
    MessageBox.Show("Ambas cadenas son " + (result ? "iguales" : "distintas"));

    • Marcado como respuesta AleBeras martes, 27 de marzo de 2018 16:57
    martes, 27 de marzo de 2018 16:48
  • Muchas Gracias
    martes, 27 de marzo de 2018 16:58
  • Gracias es todo lo que necesitaba.
    martes, 27 de marzo de 2018 16:58
  • Otra forma es comparando conjuntos (mediante Linq), aprovecho para corregir el caso en que la segunda cadena sea mayor a la primera.

    string name1 = "alejandro";
    string name2 = "dalejanroxx";
    bool result = true;
    
    bool result = (name1.GroupBy(c => c).Select(c => new { Key = c.Key, Count = c.Count() })
    	.Except(name2.GroupBy(c => c).Select(c => new { Key = c.Key, Count = c.Count() })).Count()) == 0
    	&& name1.Count() == name2.Count();
    
    MessageBox.Show("Ambas cadenas son " + (result ? "iguales" : "distintas"));

    martes, 27 de marzo de 2018 17:00