Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Sortieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.10.2004, 23:54 Uhr
Lensflare



Speichere alle wörter aus der zeichenkette temporär und weise jedem wort einen zähler zu.
überprüfe dann jedes wort darauf, ob es mit einem anderen wort identisch ist, und erhöhe den wert des zählers, der zum wort gehört. Jedes wort, dass als identisch eingestuft wurde, markierst du mit einem flag und überspringst es bei der nächsten überprüfung.

das ergebnis sollte dann so aussehen, dass alle wörter in der ursprünglichen reihenfolge sind, aber nur einmal vorkommen und die häufigkeit im zähler haben.

sie dann noch alphabetisch zu sortieren ist ne andere geschichte.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: