Wiederholung: Wortfrequenz-Zähler
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 63 von 63.
Aufgabe
EinfachErstellen Sie ein C-Programm, das einen Wortfrequenzzähler implementiert, um Texteingaben zu analysieren. Ihr Programm sollte:
- Schreiben Sie eine Funktion namens
countWordOccurrences, die:- Zwei
char*Parameter entgegennimmt:sentenceundtargetWord - Einen Integer zurückgibt, der angibt, wie oft das Zielwort im Satz vorkommt
- Eine Schleife verwendet, um den Satz Zeichen für Zeichen zu verarbeiten
- Wortgrenzen unter Verwendung von Leerzeichen als Trennzeichen identifiziert
- Jedes Wort aus dem Satz extrahiert und es mit dem Zielwort unter Verwendung von
strcmp()vergleicht - Exakte Übereinstimmungen zählt (Groß-/Kleinschreibung beachten)
- Zwei
- Schreiben Sie eine Funktion namens
extractWord, die:- Einen
char*Satz, einen IntegerstartIndexund einenchar*Wort-Parameter entgegennimmt - Einen Integer zurückgibt, der den Index nach dem extrahierten Wort darstellt
- Ein einzelnes Wort extrahiert, beginnend bei
startIndex, bis ein Leerzeichen oder ein Null-Terminator gefunden wird - Das extrahierte Wort im Parameter
wordspeichert - Einen Null-Terminator hinzufügt, um das extrahierte Wort zu vervollständigen
- Einen
- Schreiben Sie eine Funktion namens
analyzeText, die:- Einen
char*Satz-Parameter entgegennimmt - Einen Integer zurückgibt, der die Gesamtzahl der Wörter im Satz darstellt
- Wörter zählt, indem Leerzeichen als Trennzeichen identifiziert werden
- Mehrere aufeinanderfolgende Leerzeichen korrekt verarbeitet (behandelt sie als einzelne Trennzeichen)
- Einen
- In der Hauptfunktion (main):
- Deklarieren Sie ein Zeichen-Array
inputSentenceder Größe 200 - Deklarieren Sie ein Zeichen-Array
searchWordder Größe 50 - Lesen Sie einen Satz von der Eingabe ein (kann mehrere durch Leerzeichen getrennte Wörter enthalten)
- Lesen Sie ein Zielwort ein, nach dem gesucht werden soll
- Rufen Sie die Funktion
analyzeTextauf und geben Sie die Gesamtwortzahl in diesem exakten Format aus:Total words: [count] - Rufen Sie die Funktion
countWordOccurrencesauf und geben Sie das Ergebnis in diesem exakten Format aus:Occurrences of '[searchWord]': [count] - Berechnen und geben Sie die Wortfrequenz als Prozentsatz mit genau einer Dezimalstelle in diesem exakten Format aus:
Frequency: [percentage]% - Bestimmen und geben Sie die Frequenzkategorie aus:
- Wenn die Frequenz 0.0% ist: geben Sie
Category: Not foundaus - Wenn die Frequenz größer als 0.0%, aber kleiner als 20.0% ist: geben Sie
Category: Rareaus - Wenn die Frequenz zwischen 20.0% und 50.0% (einschließlich) liegt: geben Sie
Category: Commonaus - Wenn die Frequenz größer als 50.0% ist: geben Sie
Category: Frequentaus
- Wenn die Frequenz 0.0% ist: geben Sie
- Deklarieren Sie ein Zeichen-Array
Diese Herausforderung testet Ihre Beherrschung der String-Manipulation, Tokenisierung und Textverarbeitung. Sie üben das Zerlegen von Sätzen in einzelne Wörter, das Vergleichen von Strings auf exakte Übereinstimmungen und das Implementieren mehrerer Funktionen, die zusammenarbeiten, um Textdaten zu analysieren. Das Programm demonstriert praxisnahe Textverarbeitungstechniken, die für viele C-Anwendungen unerlässlich sind.
Probier es selbst
#include <stdio.h>
#include <string.h>
// TODO: Schreiben Sie hier Ihre extractWord-Funktion
// TODO: Schreiben Sie hier Ihre countWordOccurrences-Funktion
// TODO: Schreiben Sie hier Ihre analyzeText-Funktion
int main() {
char inputSentence[200];
char searchWord[50];
// Eingabesatz lesen
fgets(inputSentence, sizeof(inputSentence), stdin);
// Zeilenumbruchzeichen entfernen, falls vorhanden
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// Suchwort lesen
scanf("%s", searchWord);
// TODO: Schreiben Sie Ihren Code unten
// analyzeText-Funktion aufrufen und Gesamtwortzahl speichern
// countWordOccurrences-Funktion aufrufen und Vorkommen speichern
// Häufigkeitsprozentsatz berechnen
// Häufigkeitskategorie bestimmen
// Ergebnisse im erforderlichen Format ausgeben
// 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;
}Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen