Repaso: Contador de frecuencia de palabras
Parte de la sección Logic & Flow del Journey de C de Coddy — lección 63 de 63.
Desafío
FácilCrea un programa en C que implemente un contador de frecuencia de palabras para analizar la entrada de texto. Tu programa debe:
- Escribir una función llamada
countWordOccurrencesque:- Reciba dos parámetros
char*:sentenceytargetWord - 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)
- Reciba dos parámetros
- Escribir una función llamada
extractWordque:- Reciba una oración
char*, un enterostartIndexy un parámetro de palabrachar* - Devuelva un entero que represente el índice después de la palabra extraída
- Extraiga una sola palabra comenzando desde
startIndexhasta 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
- Reciba una oración
- Escribir una función llamada
analyzeTextque:- 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)
- Reciba un parámetro de oración
- En la función main:
- Declare un arreglo de caracteres
inputSentencede tamaño 200 - Declare un arreglo de caracteres
searchWordde 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
analyzeTexte imprima el recuento total de palabras en este formato exacto:Total words: [count] - Llame a la función
countWordOccurrencese 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
- Si la frecuencia es 0.0%: imprima
- Declare un arreglo de caracteres
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
1Fundamentos de Punteros
¿Qué es un puntero?Declaración de punterosEl operador de dirección (&)El operador de desreferencia (*)Punteros NULLResumen: Conceptos básicos de punteros4Proyecto: Utilidad de texto simple
Descripción general del proyectoContar caracteres2Punteros y Arrays
Nombres de Arrays como PunterosElementos de un Array - PunterosAritmética de PunterosComparación de PunterosResumen: Recorrido de Arrays con Punteros5Punteros y funciones
Paso por valorPasar punteros a funcionesModificar variables mediante punterosUn ejemplo clásico: Intercambio (Swap)Pasar arrays a funcionesResumen: Argumentos de punteros a funciones8Estructuras y Punteros
Punteros a estructurasEl operador flecha (->)Pasar estructuras por valorPasar punteros a estructurasAsignación dinámica de estructurasResumen: Modificar estructuras - Ptr11Desafíos de repaso final
Repaso: Concatenación dinámica de stringsRepaso: Array de structsRepaso: Contador de frecuencia de palabras3Arreglos de caracteres y cadenas
Cadenas como arreglos de charEl terminador nuloEntrada de cadenas con scanfUso de strlen()Uso de strcpy()Uso de strcat()Uso de strcmp()Resumen: Funciones básicas de cadenas