Entwickeln Sie ein Programm, das einen Text zeichenweise von
der Standardeingabe einliest. Dabei soll es,  je nach den in
der Kommandozeile uebergebenen Argumenten, entweder den Text
in Woerter zerlegen und diese alphabetisch sortiert ausgeben
oder   die  Anzahl  der  Zeichen/Woerter/Zeilen des   Textes
zaehlen.

Jedes moegliche Argument (-s fuer  sortieren, -c fuer Anzahl
der Zeichen, -w fuer Woerter und -l fuer Zeilen) soll in der
Main-  Funktion durch  eine Variable  repraesentiert werden,
die auf  "wahr" gesetzt  wird,  wenn das   ihr entsprechende
Argument in der Kommandozeile vorhanden ist.
Diese Aufgabe soll von  einer Funktion erledigt werden, d.h.
sie muss ggf. die  o.g.   Variablen aendern koennen.  Werden
unbekannte Argumente  auf  der Kommandozeile  uebergeben, so
soll  die Funktion  eine   Fehlermeldung  ausgeben   und das
Programm beenden   (siehe "man exit").    Das gleiche   soll
passieren, wenn -s zusammen mit  einer der anderen  Optionen
verwendet wird. Dagegen ist die gleichzeitige Verwendung von
-c, -w und -l   erlaubt. Falls das Programm   ohne Argumente
aufgerufen wird  soll  es sich so    verhalten als waere  -w
angegeben.

Die Bearbeitung    des  eingegebenen Textes   soll  bei  den
Argumenten -c, -w und -l (oder  bei einer Kombination davon)
von _einer_ Funktion vorgenommen werden. Diese soll den Text
zeichenweise  einlesen  (siehe  "man  getchar")   und  dabei
mitzaehlen,   wieviele    Zeichen/Woerter/Zeilen   vorhanden
sind.  Zur    Bestimmung  der Wortgrenzen  koennen   sie die
vorhandenen  C-Funktionen  verwenden  (siehe "man  isalnum",
"man isspace", usw.).

Eine  andere  Funktion   soll die   Verarbeitung  des Textes
erledigen,  wenn die Option -s   verwendet wird.  In  dieser
Funktion muessen   die  in   Aufgabe 30  erwaehnten   Felder
definiert werden, die dann  mit den  ebenfalls vorgestellten
Funktionen  next_word()  und  insert_word()  gefuellt werden
koennen. Achten Sie hierbei darauf, dass ein Wort nur einmal
im Feld abgespeichert wird.  Nun soll noch in alphanumerisch
aufsteigender Reihenfolge  (d.h. so wie  von string_cmp() in
Aufgabe 30 geordnet) sortiert  (siehe Teilaufgabe d) und die
Woerter in der neuen Reihenfolge augegeben werden.

Sie benoetigen  zwei  weitere Funktionen   zum sortieren des
Feldes all_words:  Eine Funktion swap() zum  Vertauschen von
zwei  Elementen      des  Feldes,  sowie    eine    Funktion
string_sort(),  die   die  Feldelemente  (bzw.  die Strings,
worauf die Elemente   zeigen) vergleicht und  ggf vertauscht
(man erinnere sich an den Bubble-Sort...).

Geben Sie zu der im  Aufgabenteil a) programmierten Funktion
ein Struktogramm ab.

Sie finden unter /proj/i4cing/CountAndSort/ ein Geruest fuer
Ihr Programm, das u.a. auch die  in Aufgabe 30 vorgestellten
Funktionen enthaelt (es ist alles auch im WWW verfuegbar unter
http://www4.informatik.uni-erlangen.de/Lehre/SS98/V_C/Uebung/).
Dort   liegt ausserdem ein  Text, den   Sie zum Testen Ihres
Programms   verwenden koennen. Wenn  das  Programm  z.B. cas
heisst koennte ein Testlauf z.B. so aussehen:

> cas -l -c < A32.txt
Zeichen: 3115
Zeilen:  65