Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: a.p007 en 24 Marzo 2017, 22:41 pm



Título: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: a.p007 en 24 Marzo 2017, 22:41 pm
Hola Buenas Tardes nesecito una pequeña ayuda en un programa, no se como contar cuantas veces se repite una palabra dentro de una oracion POR EJEMPLO:

Código
  1. console.writeline("hola adios hola adios hola");
  2. int frase = console.readline();

-devolver cual fue la palabra que mas se repitio?
-Cuantas Veces se repitio ?

Agradeceria Mucho su ayuda Gracias !!


· Los códigos deben ir en etiquetas GeSHi
· C# es .NET, no Visual Basic (movido)
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: engel lex en 24 Marzo 2017, 23:37 pm
que has intentado? que has visto en internet que te pueda funcionar?


Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: a.p007 en 25 Marzo 2017, 00:23 am
La verdad he intentado de varias formas con for,foreach. usando contadores y de hecho logro sacar la cantidad de veces que se menciona cada palabra pero como te digo nose como sacar cual es la que mas se repite y su cantidad no se como ?? me dijeron con un arreglo o un diccionario pero soy nuevo y no cacho como usarlo en sintanxis :((((( ayuda porfa


Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: Borito30 en 25 Marzo 2017, 01:43 am
Puedes usar una función encargada de contar.
Código:
public int WordsCount(string text)
{
    if (string.IsNullOrEmpty(text))
    {
        return 0;
    }

    var count = 0;
    var word = false;

    foreach (char symbol in text)
    {
        if (!char.IsLetter(symbol))
        {
            word = false;
            continue;
        }

        if (word)
        {
            continue;
        }
        if(word=="palabra"){
           count++;
        }
        word = true;
    }

    return count;
}

Y luego la llamas desde el main:
Código:
int i;
i = WordsCount(string text);
Console.WriteLine(i);


Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: a.p007 en 25 Marzo 2017, 02:13 am
Código
  1.                            string[] myArray = new string[texto.Length];
  2.                            for (int i = 0; i < texto.Length; i++)
  3.                                myArray[i] = texto[i].ToString();
  4.  
  5.                            int contador2 = 0;
  6.                            for (int j = 0; j < myArray.Length; j++)
  7.                                if (myArray[i] == "letra")
  8.                                {
  9.                                    contador2++;
  10.                                }
  11.  
-asi me quedo pero me tiro error en  if (myArray == "letra") esa parte dice "que i no existe en el contexto", y disculpa por preguntar pero donde dice "letra" se debe cambiar algo ahi ?? de verdad q me averguenza preguntar esto ://


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: okik en 25 Marzo 2017, 08:59 am
una forma muy fácil es usar esta línea:


Código
  1. int CountItems1 = (from ItemRep in ARRAY where (ItemRep == "hola") select ItemRep).ToList().Count;


EJEMPLO:

Código
  1. string frase = "hola adios hola adios hola"; //Cadena
  2. string[] misplits = frase.Split(new char[]{' '}); //Convierte la cadena en array
  3.  
  4. //Cuenta la palabra hola
  5. int CountItems1 = (from ItemRep in misplits where (ItemRep == "hola")
  6.                   select ItemRep).ToList().Count;
  7.  
  8. //Cuenta la palabra adios
  9. int CountItems2 = (from ItemRep in misplits where (ItemRep == "adios")
  10.                   select ItemRep).ToList().Count;
  11.  
  12. Console.Write("hola: " + CountItems1 + " repeticiones" + Environment.NewLine);
  13. Console.Write("adios: " + CountItems2 + " repeticiones");
  14. Console.ReadLine();
  15.  

convierte la cadena en array  y después mediante FROME WHERE cuenta los elementos del array  donde el ítem sea igual a la palabra que se quiera contar.

para evitar que no distinga mayúsculas y minúsculas usa ToLower:

Código
  1. ... where (ItemRep == "hola".ToLower()) ...



mas tarde he recordado que había un método "FIND", curioseando he encontrado Array.FindAll. Con el cual se puede más fácilmente contar los elementos repetidos de una lista.

Código
  1. string frase = "hola adios hola adios hola"; //Cadena
  2. string[] misplits = frase.Split(new char[] { ' ' }); //Convierte la cadena en array
  3. int Items = Array.FindAll(misplits, x => x == "adios").Count(); //cuenta los elementos
  4. Console.Write(Items);
  5. Console.ReadLine();
  6.  

lo que hace Array.FindAll es obtener un array en los que se introducen todos los elementos que cumpla una determinada condición. En este caso que sean igual a "adios".









Título: Re: C sharp - Como Contar la Repeticion de una palabra en una frase.
Publicado por: Eleкtro en 25 Marzo 2017, 10:13 am

· C# es .NET, no Visual Basic (movido)
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex

Jamás llegaré a comprender a que razonamiento llegan las personas para decidir que lo mejor es publicar una pregunta de C# en un foro de VB6...

...En fin.



-devolver cual fue la palabra que mas se repitio?
-Cuantas Veces se repitio ?

Puedes simplificar (que no optimizar) la tarea utilizando LINQ para agrupar los elementos del array según la cantidad de veces que se repitan, luego opcionálmente puedes ordenar los grupos según el valor de repetición, y por último añadirías la secuencia generada a un tipo de contenedor para darle un uso más amistoso, en este caso escogí el tipo Diccionario para denotar la ausencia de elementos (llaves) repetidos en la colección:

Código
  1. string[] arr = {"hola", "adios", "hola", "adios", "hola"};
  2.  
  3. Dictionary<string, int> countDict =
  4.    arr.GroupBy(str => str).
  5.        OrderByDescending(group => group.Count()).
  6.        ToDictionary(group => group.Key,
  7.                     group => group.Count(), StringComparer.Ordinal);
  8.  
  9. KeyValuePair<string, int> max = countDict.First();
  10. Console.WriteLine(string.Format("The most repeated element is \"{0}\" with a count of \"{1}\".", max.Key, max.Value));

Resultado de ejecución:
Cita de: Visual Studio's Debug Output Window
The most repeated element is "hola" with a count of "3".

Nota: Si quieres tener mayor control sobre el ordenamiento de los elementos de la colección, entonces utiliza el tipo OrderedDictionary o SorteredDictionary según tus necesidades.

¡Saludos!