Повторение: счетчик частоты слов
Часть раздела Logic & Flow путешествия по C на Coddy — урок 63 из 63.
Задание
ЛегкоСоздайте программу на языке C, которая реализует счетчик частоты слов для анализа вводимого текста. Ваша программа должна:
- Написать функцию с именем
countWordOccurrences, которая:- Принимает два параметра типа
char*:sentenceиtargetWord - Возвращает целое число, представляющее количество раз, которое целевое слово встречается в предложении
- Использует цикл для посимвольной обработки предложения
- Определяет границы слов, используя пробелы в качестве разделителей
- Извлекает каждое слово из предложения и сравнивает его с целевым словом с помощью
strcmp() - Считает точные совпадения (с учетом регистра)
- Принимает два параметра типа
- Написать функцию с именем
extractWord, которая:- Принимает предложение
char*, целое числоstartIndexи параметрchar*word - Возвращает целое число, представляющее индекс после извлеченного слова
- Извлекает одно слово, начиная с
startIndex, пока не встретится пробел или нулевой терминатор - Сохраняет извлеченное слово в параметре
word - Добавляет нулевой терминатор для завершения извлеченного слова
- Принимает предложение
- Написать функцию с именем
analyzeText, которая:- Принимает параметр предложения
char* - Возвращает целое число, представляющее общее количество слов в предложении
- Считает слова, идентифицируя пробелы как разделители
- Корректно обрабатывает несколько идущих подряд пробелов (рассматривает их как один разделитель)
- Принимает параметр предложения
- В функции main:
- Объявить символьный массив
inputSentenceразмером 200 - Объявить символьный массив
searchWordразмером 50 - Прочитать предложение из входных данных (может содержать несколько слов, разделенных пробелами)
- Прочитать целевое слово для поиска
- Вызвать функцию
analyzeTextи вывести общее количество слов в точном формате:Total words: [count] - Вызвать функцию
countWordOccurrencesи вывести результат в точном формате:Occurrences of '[searchWord]': [count] - Рассчитать и вывести частоту слова в процентах ровно с 1 десятичным знаком в точном формате:
Frequency: [percentage]% - Определить и вывести категорию частоты:
- Если частота равна 0.0%: вывести
Category: Not found - Если частота больше 0.0%, но меньше 20.0%: вывести
Category: Rare - Если частота составляет от 20.0% до 50.0% (включительно): вывести
Category: Common - Если частота больше 50.0%: вывести
Category: Frequent
- Если частота равна 0.0%: вывести
- Объявить символьный массив
Эта задача проверяет ваше мастерство в манипулировании строками, токенизации и обработке текста. Вы попрактикуетесь в разбиении предложений на отдельные слова, сравнении строк на точное соответствие и реализации нескольких функций, которые работают вместе для анализа текстовых данных. Программа демонстрирует реальные методы обработки текста, необходимые для многих приложений на C.
Попробуйте сами
#include <stdio.h>
#include <string.h>
// TODO: Напишите здесь вашу функцию extractWord
// TODO: Напишите здесь вашу функцию countWordOccurrences
// TODO: Напишите здесь вашу функцию analyzeText
int main() {
char inputSentence[200];
char searchWord[50];
// Чтение входного предложения
fgets(inputSentence, sizeof(inputSentence), stdin);
// Удаление символа новой строки, если он присутствует
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// Чтение искомого слова
scanf("%s", searchWord);
// TODO: Напишите ваш код ниже
// Вызовите функцию analyzeText и сохраните общее количество слов
// Вызовите функцию countWordOccurrences и сохраните количество вхождений
// Рассчитайте процент частоты
// Определите категорию частоты
// Вывод результатов в требуемом формате
// 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;
}Все уроки раздела Logic & Flow
1Основы указателей
Что такое указатель?Объявление указателейОператор взятия адреса (&)Оператор разыменования (*)Указатели NULLИтоги: Основы указателей4Проект: Простая текстовая утилита
Обзор проектаПодсчет символов2Указатели и массивы
Имена массивов как указателиЭлементы массива — указателиАрифметика указателейСравнение указателейИтоги: Обход массива через указатели5Указатели и функции
Передача по значениюПередача указателей в функцииИзменение переменных через указателиКлассический пример: SwapПередача массивов в функцииИтоги: указатели как аргументы функций8Структуры и указатели
Указатели на структурыОператор «стрелка» (->)Передача структур по значениюПередача указателей на структурыДинамическое выделение памяти для структурИтоги: Изменение структур через указатели11Итоговые задачи на повторение
Повторение: динамическая конкатенация строкПовторение: массив структурПовторение: счетчик частоты слов3Символьные массивы и строки
Строки как массивы charНуль-терминаторВвод строк с помощью scanfИспользование strlen()Использование strcpy()Использование strcat()Использование strcmp()Итоги: основные строковые функции