000
01.10.2004, 18:28 Uhr
rejo
|
Hallo an alle hab bei meiner aufgabe ein programm vorgegeben und muss eine funktion namens getword() schreiben und die ausgabe sortieren. Das Programm soll Zeichenketten einlesen und ausgegeben werden soll die Häufigkeit der eingegebenen Wörter. Vom wenigst eingelesten bis zum häufigst eingelesten wörtern.
zB.: Eingabe -> Hallo Mein Name Ist Hallo Hallo
Ausgabe -> 1 Ist 1 Mein 1 Name 3 Hallo
dann muss man ESC drücken um weiter zu machen!
so in etwa...
C++: |
#include<stdio.h> #include<ctype.h> #include<string.h> // Einbindung von Bibliotheken #include<stdlib.h> #include<conio.h> #define MAX 100 // MAX bekommt den Wert von 100
struct tnode // Struktur tnode wird definiert { char *word; // Pointer auf char int count; // Zaehler struct tnode *left; // Pointer auf die Struktur tnode struct tnode *right; // Pointer auf die Struktur tnode };
struct tnode *addtree(struct tnode *p, char *w); // Funktionsprototypen int getword(char *w, int max); struct tnode *talloc(void); void treeprint(tnode *p);
int main() // Anfang des Programms { struct tnode *root; // Variablendefinition char word[MAX];
root = NULL; // root-Zeiger zeigt auf nichts while(getword(word,MAX) != EOF) // solange die Funktion getword nicht EOF zurückgibt geht er die Schleife durch { if(isalpha(word[0])) // wenn der erste Buchstabe in der Zeichenkette word ein Buchstabe ist dann ... { root = addtree(root, word); // ruft die Funktion addtree auf und der Wert der addtree zurueckliefert wird in root geschrieben } }
treeprint(root); // ruft die Funktion treeprint auf
return(0); }
struct tnode *addtree(struct tnode *p, char *w) // Funktion addtree {
int cond; // Variablendefinition
if(p == NULL) // wenn p (root) auf nichts zeigt dann ... { p = talloc(); // ruft die Funktion talloc auf und der Wert der talloc zurueckgeliefert wird in p (root) geschrieben
p->word = strdup(w); // der word-Zeiger zeigt dann auf die Adresse die strdup zurueckgegeben hat p->count = 1; // der Zaehler wird auf 1 gesetzt p->left = p->right = NULL; // beide Pointer left und right zeigen nun auf nichts } else if((cond = strcmp(w, p->word)) == 0) // ansonsten wenn w und word gleich sind dann ( in cond wird der Rueckgabewert von strcmp geschrieben ) ... {
p->count++; // der Zaehler wird um eins erhoeht } else if (cond < 0) // ansonsten wenn cond kleiner als 0 ist also strcmp -1 zurueckliefert dann { p->left = addtree(p->left, w); // ruft addtree auf und der Rueckgabewert wird in left geschrieben } else // wenn alles nicht zutrifft dann { p->right = addtree(p->right, w); // ruft addtree auf und der Rueckgabewert wird in right geschrieben }
return(p);
}
int getword(char *w, int max) { int a = 0; int b = -1;
while(a != 13 && a != 27) { b++; a = w[b] = getch(); printf("%c", w[b]); }
w[b+1] = '\0';
printf("\n");
switch(a) { case 27: return EOF;
default: return 0; } }
struct tnode *talloc(void) // Funktion talloc {
return (struct tnode *) malloc(sizeof(struct tnode)); // eine Struktur wird erzeugt und gleich zurueckgegeben
}
void treeprint(struct tnode *p) // Funktion treeprint { if (p != NULL) // wenn p auf etwas zeigt dann... { treeprint(p->left); // treeprint wird aufgerufen printf("%d %s\n", p->count, p->word); // Ausgabe des Zaehlers und der Zeichenkette treeprint(p->right); // treeprint wird aufgerufen } }
|
freu mich auf jede antwort Dieser Post wurde am 01.10.2004 um 18:28 Uhr von rejo editiert. |