C sharp - Como Contar la Repeticion de una palabra en una frase.

Iniciado por a.p007, 24 Marzo 2017, 22:41 PM

0 Miembros y 1 Visitante están viendo este tema.

a.p007

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 (csharp) [Seleccionar]
console.writeline("hola adios hola adios hola");
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
-Engel Lex

engel lex

que has intentado? que has visto en internet que te pueda funcionar?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

a.p007

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

Borito30

#3
Puedes usar una función encargada de contar.
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:
int i;
i = WordsCount(string text);
Console.WriteLine(i);
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

a.p007

#4
Código (csharp) [Seleccionar]
                           string[] myArray = new string[texto.Length];
                           for (int i = 0; i < texto.Length; i++)
                               myArray[i] = texto[i].ToString();

                           int contador2 = 0;
                           for (int j = 0; j < myArray.Length; j++)
                               if (myArray[i] == "letra")
                               {
                                   contador2++;
                               }

-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
-Engel Lex

okik

#5
una forma muy fácil es usar esta línea:


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


EJEMPLO:

Código (csharp) [Seleccionar]

string frase = "hola adios hola adios hola"; //Cadena
string[] misplits = frase.Split(new char[]{' '}); //Convierte la cadena en array

//Cuenta la palabra hola
int CountItems1 = (from ItemRep in misplits where (ItemRep == "hola")
                  select ItemRep).ToList().Count;

//Cuenta la palabra adios
int CountItems2 = (from ItemRep in misplits where (ItemRep == "adios")
                  select ItemRep).ToList().Count;

Console.Write("hola: " + CountItems1 + " repeticiones" + Environment.NewLine);
Console.Write("adios: " + CountItems2 + " repeticiones");
Console.ReadLine();


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 (csharp) [Seleccionar]
... 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 (csharp) [Seleccionar]

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


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".








Eleкtro

#6
Cita de: a.p007 en 24 Marzo 2017, 22:41 PM
· C# es .NET, no Visual Basic (movido)
>aquí las reglas del foro
-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.




Cita de: a.p007 en 24 Marzo 2017, 22:41 PM-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 (csharp) [Seleccionar]
string[] arr = {"hola", "adios", "hola", "adios", "hola"};

Dictionary<string, int> countDict =
   arr.GroupBy(str => str).
       OrderByDescending(group => group.Count()).
       ToDictionary(group => group.Key,
                    group => group.Count(), StringComparer.Ordinal);

KeyValuePair<string, int> max = countDict.First();
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 WindowThe 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!