Menu
Coddy logo textTech

Powtórka: licznik częstotliwości słów

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 63 z 63.

challenge icon

Wyzwanie

Łatwy

Utwórz program w języku C, który implementuje licznik częstotliwości występowania słów do analizowania tekstu wejściowego. Twój program powinien:

  1. Napisać funkcję o nazwie countWordOccurrences, która:
    • Przyjmuje dwa parametry typu char*: sentence i targetWord
    • Zwraca liczbę całkowitą określającą, ile razy słowo docelowe występuje w zdaniu
    • Używa pętli do przetwarzania zdania znak po znaku
    • Rozpoznaje granice słów, używając spacji jako separatorów
    • Wyodrębnia każde słowo ze zdania i porównuje je ze słowem docelowym za pomocą strcmp()
    • Zlicza dokładne dopasowania (porównanie uwzględniające wielkość liter)
  2. Napisać funkcję o nazwie extractWord, która:
    • Przyjmuje zdanie typu char*, liczbę całkowitą startIndex oraz parametr słowa typu char*
    • Zwraca liczbę całkowitą określającą indeks za wyodrębnionym słowem
    • Wyodrębnia pojedyncze słowo, zaczynając od startIndex, aż do napotkania spacji lub terminatora null
    • Zapisuje wyodrębnione słowo w parametrze word
    • Dodaje terminator null, aby zakończyć wyodrębnione słowo
  3. Napisać funkcję o nazwie analyzeText, która:
    • Przyjmuje parametr zdania typu char*
    • Zwraca liczbę całkowitą określającą łączną liczbę słów w zdaniu
    • Zlicza słowa, rozpoznając spacje jako separatory
    • Prawidłowo obsługuje kilka kolejnych spacji (traktuje je jako pojedyncze separatory)
  4. W funkcji main:
    • Zadeklarować tablicę znaków inputSentence o rozmiarze 200
    • Zadeklarować tablicę znaków searchWord o rozmiarze 50
    • Wczytać zdanie z wejścia (może zawierać wiele słów rozdzielonych spacjami)
    • Wczytać słowo docelowe do wyszukania
    • Wywołać funkcję analyzeText i wypisać łączną liczbę słów dokładnie w tym formacie: Total words: [count]
    • Wywołać funkcję countWordOccurrences i wypisać wynik dokładnie w tym formacie: Occurrences of '[searchWord]': [count]
    • Obliczyć i wypisać częstotliwość występowania słowa jako procent z dokładnością do 1 miejsca po przecinku, dokładnie w tym formacie: Frequency: [percentage]%
    • Określić i wypisać kategorię częstotliwości:
      • Jeśli częstotliwość wynosi 0.0%: wypisać Category: Not found
      • Jeśli częstotliwość jest większa niż 0.0%, ale mniejsza niż 20.0%: wypisać Category: Rare
      • Jeśli częstotliwość wynosi od 20.0% do 50.0% (włącznie): wypisać Category: Common
      • Jeśli częstotliwość jest większa niż 50.0%: wypisać Category: Frequent

To wyzwanie sprawdza Twoją biegłość w manipulowaniu ciągami znaków, tokenizacji i przetwarzaniu tekstu. Będziesz ćwiczyć dzielenie zdań na pojedyncze słowa, porównywanie ciągów znaków pod kątem dokładnych dopasowań oraz implementowanie wielu funkcji współpracujących ze sobą w celu analizowania danych tekstowych. Program demonstruje techniki przetwarzania tekstu stosowane w rzeczywistych zastosowaniach, niezbędne w wielu programach w języku C.

Spróbuj swoich sił

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

// TODO: Napisz tutaj funkcję extractWord

// TODO: Napisz tutaj funkcję countWordOccurrences

// TODO: Napisz tutaj funkcję analyzeText

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // Wczytaj zdanie wejściowe
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // Usuń znak nowej linii, jeśli występuje
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // Wczytaj szukane słowo
    scanf("%s", searchWord);
    
    // TODO: Napisz swój kod poniżej
    // Wywołaj funkcję analyzeText i zapisz całkowitą liczbę słów
    // Wywołaj funkcję countWordOccurrences i zapisz liczbę wystąpień
    // Oblicz procentową częstość występowania
    // Określ kategorię częstości występowania
    
    // Wyświetl wyniki w wymaganym formacie
    // 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;
}

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online