Menu
Coddy logo textTech

Repaso: Contador de frecuencia de palabras

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 63 de 63.

challenge icon

Desafío

Fácil

Crea un programa en C que implemente un contador de frecuencia de palabras para analizar la entrada de texto. Tu programa debe:

  1. Escribir una función llamada countWordOccurrences que:
    • Reciba dos parámetros char*: sentence y targetWord
    • Devuelva un entero que represente el número de veces que la palabra objetivo aparece en la oración
    • Utilice un bucle para procesar la oración carácter por carácter
    • Identifique los límites de las palabras utilizando espacios como delimitadores
    • Extraiga cada palabra de la oración y la compare con la palabra objetivo usando strcmp()
    • Cuente las coincidencias exactas (comparación sensible a mayúsculas y minúsculas)
  2. Escribir una función llamada extractWord que:
    • Reciba una oración char*, un entero startIndex y un parámetro de palabra char*
    • Devuelva un entero que represente el índice después de la palabra extraída
    • Extraiga una sola palabra comenzando desde startIndex hasta que se encuentre un espacio o un terminador nulo
    • Almacene la palabra extraída en el parámetro word
    • Añada un terminador nulo para completar la palabra extraída
  3. Escribir una función llamada analyzeText que:
    • Reciba un parámetro de oración char*
    • Devuelva un entero que represente el número total de palabras en la oración
    • Cuente las palabras identificando los espacios como separadores
    • Maneje correctamente múltiples espacios consecutivos (tratándolos como separadores únicos)
  4. En la función main:
    • Declare un arreglo de caracteres inputSentence de tamaño 200
    • Declare un arreglo de caracteres searchWord de tamaño 50
    • Lea una oración de la entrada (puede contener múltiples palabras separadas por espacios)
    • Lea una palabra objetivo para buscar
    • Llame a la función analyzeText e imprima el recuento total de palabras en este formato exacto: Total words: [count]
    • Llame a la función countWordOccurrences e imprima el resultado en este formato exacto: Occurrences of '[searchWord]': [count]
    • Calcule e imprima la frecuencia de la palabra como un porcentaje con exactamente 1 decimal en este formato exacto: Frequency: [percentage]%
    • Determine e imprima la categoría de frecuencia:
      • Si la frecuencia es 0.0%: imprima Category: Not found
      • Si la frecuencia es mayor que 0.0% pero menor que 20.0%: imprima Category: Rare
      • Si la frecuencia está entre 20.0% y 50.0% (inclusive): imprima Category: Common
      • Si la frecuencia es mayor que 50.0%: imprima Category: Frequent

Este desafío pone a prueba tu dominio de la manipulación de cadenas, la tokenización y el procesamiento de texto. Practicarás la división de oraciones en palabras individuales, la comparación de cadenas para coincidencias exactas y la implementación de múltiples funciones que trabajan juntas para analizar datos de texto. El programa demuestra técnicas de procesamiento de texto del mundo real esenciales para muchas aplicaciones en C.

Pruébalo tú mismo

#include <stdio.h>
#include <string.h>

// TODO: Escribe tu función extractWord aquí

// TODO: Escribe tu función countWordOccurrences aquí

// TODO: Escribe tu función analyzeText aquí

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // Leer la oración de entrada
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // Eliminar el carácter de nueva línea si está presente
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // Leer la palabra de búsqueda
    scanf("%s", searchWord);
    
    // TODO: Escribe tu código a continuación
    // Llamar a la función analyzeText y almacenar el recuento total de palabras
    // Llamar a la función countWordOccurrences y almacenar las ocurrencias
    // Calcular el porcentaje de frecuencia
    // Determinar la categoría de frecuencia
    
    // Mostrar los resultados en el formato requerido
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

Todas las lecciones de Logic & Flow