3061 Texte Textbearbeitung (mit mehreren Strings)
Kategorie:String
Klasse:schwer
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Texte.txt, Texte.java, *.java , 187.txt, 59.txt

Kurzbeschreibung:

Strings und eine Zahl, die als gewünschte Breite interpretiert wird, werden eingelesen; der String wird entsprechend der Breite umgebrochen (abgetrennt und auf mehrere Zeilen verteilt). Außerdem werden bestimmte Interpunktionsfehler korrigiert. Außerdem ist die Anzahl der Wörter und Abteilungen auszugeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie Strings ein, die nur aus Buchstaben und folgenden Sonderzeichen bestehen dürfen:
( ) . , ; "
Klammer auf, Klammer zu, Punkt, Komma, Strichpunkt, Anführungszeichen.

Achtung: In dieser Spezifikation wird das einfache Hochkomma verwendet, um diese Interpunktionszeichen einzuklammern; dieses Zeichen (') darf in den Eingabestrings nicht vorkommen!

Sobald ein String eingelesen wird, der mit einer Ziffer beginnt, ist dieser als gewünschte Zeilenbreite zu interpretieren. Die Strings sollen auf Korrektheit untersucht werden, gewisse Interpunktionsfehler sind zu korrigieren und schließlich sind die eingelesenen Strings so abzuteilen, daß sie die eingelesene Breite nicht überschreiten.

Korrektheitsregeln:

Ein String darf nicht nur aus Interpunktionszeichen bestehen, es muß auch ein Wort vorkommen.

Das Zeichen '"' darf am Anfang und am Ende des Strings stehen. Die Interpunktionszeichen außer '"', '(' und ',' dürfen ausschließlich am Ende eines Strings stehen, wobei bei '"' und ')' noch eines der Zeichen '.', ',', ';' folgen oder davorstehen (auch beides erlaubt) darf. Das Zeichen '(' darf nur am Anfang eines Strings stehen; ',' darf nicht am Anfang eines Strings stehen.

Die Zeichen '"' und '(' müssen auch wieder durch '"' bzw. ')' geschlossen werden.

Großbuchstaben dürfen nur am Anfang eines Wortes stehen; der erste Buchstabe eines Satzes muß ein Großbuchstabe sein.

Ein Wort muß mindestens aus zwei und maximal aus 12 Buchstaben bestehen; es ist verboten, in einem Wort mehr als dreimal denselben Buchstaben hintereinander zu schreiben.

Ein Wort kann als eigener String eingegeben werden oder durch ein ',' getrennt an ein anderes Wort angehängt werden; ein String enthält also entweder ein Wort oder mehrere durch Beistriche getrennte Wörter.

Interpunktionsfehler,die zu korrigieren sind (die Eingabe ist aufgrund dieser Fehler noch nicht ungültig!):

Wenn mehrere ',', ';', '"' oder '.' direkt hintereinander folgen, so ist das Zeichen nur einmal auszugeben.

Wenn ',' und ';' gemeinsam auftreten, so ist nur der Beistrich auszugeben.
Diese Zeichen dürfen mehrmals hintereinander stehen (',,;;;;'), aber nicht gemischt (',,;,;').

Wenn hinter dem letzten Wort kein '.' folgt, so ist einer anzuhängen. Sollte ein Interpunktionszeichen außer ')', '"' und '.' nach dem letzten Wort stehen, so ist dieses zu entfernen.

Abteilungsregeln:

Es muß immer versucht werden, soviel wie möglich in eine Zeile zu bringen, also erst bei der letzten Möglichkeit abzuteilen. Die eingegebene Breite darf aber nie überschritten werden.

Beachten Sie, daß zwischen zwei Eingabestrings jeweils ein Leerzeichen einzufügen ist, sofern dieses nicht am Anfang oder Ende einer Zeile stehen würde.

Innerhalb eines Wortes darf vor und nach folgende Silben getrennt werden:

-keit-, -heit-, -los-, -sam-, -schaft

Hinter einer derartigen Silbe darf allerdings nur getrennt werden, wenn mindestens zwei weitere Buchstaben folgen.

Wenn innerhalb des Wortes geteilt wird, so muß in der oberen Zeile das Zeichen '-' stehen; dieses muß auch noch in die Zeile passen!

Interpunktionszeichen dürfen nicht von einem Wort getrennt werden; NACH einem Komma darf aber abgeteilt werden.

Eingabedaten:

Lesen Sie die Strings ein, die nur aus den oben genannten Zeichen bestehen dürfen. Es dürfen maximal 10 Strings (exkl. Breitenangabe) eingegeben werden.

Sobald ein String mit einer Ziffer beginnt, ist dies die Breitenangabe; hier dürfen klarerweise nur mehr weitere Ziffern stehen.

Die Breite muß größer als 1/3 der Summe aller Stringlängen des eingegebenen Strings sein, wobei jeweils zwischen zwei Strings noch ein Leerzeichen einzurechen ist, und darf diese nicht übersteigen. Außerdem muß die Breite im Bereich von 3 bis 55 liegen.

Nach den oben genannten Regeln muß eine Abteilung möglich sein; nicht abtrennbare Wörter, die länger als die Breite sind, sind unzulässig und daher als fehlerhafte Eingabe anzusehen.

Ausgabedaten:

Bei korrekten Eingabedatensätzen soll Ihr Programm die durch die Abteilung erzeugten Zeilen ausgeben, getrennt durch Zeilenvorschübe. Zwischen zwei Eingabestrings soll dabei jeweils ein Leerzeichen ausgegeben werden, sofern dieses nicht am Anfang oder Ende einer Zeile steht.

Danach geben Sie in einer eigenen Zeile die Gesamtanzahl der Wörter in den Strings sowie die Anzahl der durchgeführten Abtrennungen im Inneren eines Wortes aus, gefolgt von einem Zeilenvorschub.

Fehlerbehandlung:

Bei fehlerhaften Eingabedaten soll Ihr Programm die Meldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben. Die eingelesenen Daten sind nicht zu verarbeiten.

Beispiele:

Eingabedaten
Das.. "ist" ein,, Test, 8

Heiterkeiten und, "So".. 11

Heiterkeiten und "So" 10

Ausgabedaten
Das.
"ist"
ein,
Test.
4 0

Heiterkeit-
en und,
"So".
3 1

Heiter-
keiten und
"So".
3 1


Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Texte < Texte.i1 > Texte.out1

Das erzeugte File Texte.out1 können Sie dann mit dem mitgelieferten Outputfile Texte.o1 vergleichen.