Powtórka: licznik częstotliwości słów
Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 63 z 63.
Wyzwanie
ŁatwyUtwó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:
- Napisać funkcję o nazwie
countWordOccurrences, która:- Przyjmuje dwa parametry typu
char*:sentenceitargetWord - 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)
- Przyjmuje dwa parametry typu
- Napisać funkcję o nazwie
extractWord, która:- Przyjmuje zdanie typu
char*, liczbę całkowitąstartIndexoraz parametr słowa typuchar* - 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
- Przyjmuje zdanie typu
- 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)
- Przyjmuje parametr zdania typu
- W funkcji main:
- Zadeklarować tablicę znaków
inputSentenceo rozmiarze 200 - Zadeklarować tablicę znaków
searchWordo rozmiarze 50 - Wczytać zdanie z wejścia (może zawierać wiele słów rozdzielonych spacjami)
- Wczytać słowo docelowe do wyszukania
- Wywołać funkcję
analyzeTexti wypisać łączną liczbę słów dokładnie w tym formacie:Total words: [count] - Wywołać funkcję
countWordOccurrencesi 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
- Jeśli częstotliwość wynosi 0.0%: wypisać
- Zadeklarować tablicę znaków
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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online