3011 Text Textbearbeitung
Kategorie:String
Klasse:schwer
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Text.txt, Text.java, *.java , 338.txt, 564.txt

Kurzbeschreibung:

Ein String 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 ist die Anzahl der vorkommenden Silben auszugeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie zuerst einen String ein, der nur aus Buchstaben und den Sonderzeichen ',' und '"' (Komma und Anführungszeichen) bestehen darf (Achtung: das einfache Hochkomma ist Teil dieses Textes, darf aber im String nicht vorkommen; es handelt sich um ein metasprachliches Symbol).

Sehen Sie den String als eine Kette von Wörtern, die durch Kommas getrennt sind.

Danach wird eine Zahl eingelesen, die die gewünschte Zeilenbreite angibt. Der String soll nun so abgeteilt werden, daß diese Zeilenbreite nicht überschritten wird. Die Abtrennung erfolgt entweder NACH einem Komma oder in einem Wort, wobei die unten aufgeführten Silbentrennungsregeln einzuhalten sind. Es soll immer so weit hinten wie möglich abgetrennt werden.

Wenn im Wort mittels Silbentrennung abgeteilt wird, so ist an der entsprechenden Stelle ein Bindestrich einzufügen; dieser muß aber auch noch in die Zeile passen!

Das Anführungszeichen '"' hat eine spezielle Bedeutung: Textteile, die zwischen zwei Anführungszeichen stehen, dürfen nicht abgeteilt werden, sondern müssen in einer Zeile stehen. Diese Anführungszeichen sollen in der Ausgabe nicht erscheinen.

Wenn innerhalb der Anführungszeichen zwei Anführungszeichen direkt hintereinander stehen, dann soll in der Ausgabe an dieser Stelle EIN Anführungszeichen stehen. In diesem Fall ist der 'trenngeschützte' Textteil noch nicht abgeschlossen; erst das nächste (nichtverdoppelte) Anführungszeichen beendet diesen Modus. (z.B. "Hallo,""Welt""" -> Hallo,"Welt")

Zum Schluß soll Ihr Programm die Anzahl der Silben im String ausgeben.

Hier nun die Regeln für die Silbentrennung (diese entsprechen nicht der deutschen Silbentrennung):

Betrachten Sie zwei aufeinanderfolgende Buchstaben als Silbe.

Wenn eine Silbe aus zwei Konsonanten (Mitlauten) bestehen würde, geben Sie den ersten Buchstaben zur davorliegenden Silbe und betrachten Sie den zweiten Buchstaben als ersten der nachfolgenden Silbe (wenn diese wieder aus zwei Konsonanten bestehen würde, wiederholt sich das Spielchen).

Wenn jedoch schon die erste Silbe des Wortes nur aus Konsonanten bestehen würde, so sollen Sie solange weitere Buchstaben an die Silbe anhängen, bis ein Vokal dazukommt (z.B. Stra-te-gie). Wörter ohne Vokale sind unzulässig.

Die Buchstabenkombinationen "ei" und "ie" sind niemals zu trennen, sondern der vorangehenden Silbe dazuzugeben.

Wenn am Wortende nach der Silbentrennung ein einzelner Buchstabe überbleibt, dann geben Sie ihn zur letzten Silbe dazu.

Eingabedaten:

Lesen Sie den String ein, der nur aus den oben genannten Zeichen bestehen darf. Dieser darf nicht länger als 120 Zeichen sein.

Danach lesen Sie die Zeilenbreite als Integer-Zahl ein.

Folgende zusätzliche Regeln müssen eingehalten sein, damit der Eingabedatensatz zulässig ist:

Ein Wort darf höchstens 15 Zeichen lang sein.

Großbuchstaben dürfen nur am Anfang eines Wortes vorkommen.

Die Breite muß größer als 1/3 der Stringlänge sein 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 Teile (untrennbare Wörter oder Teile in Anführungszeichen), die länger als die Breite sind, sind unzulässig.

Anführungszeichen dürfen nur am Anfang und Ende von Wörtern auftreten; jedes geöffnete Anführungszeichen muß auch wieder geschlossen werden.

Ausgabedaten:

Bei korrekten Eingabedatensätzen soll Ihr Programm die durch die Abteilung erzeugten Zeilen ausgeben, getrennt durch Zeilenvorschübe.

Danach geben Sie in einer eigenen Zeile die Gesamtanzahl der Silben im String aus, gefolgt von einem Zeilenvorschub.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Waren die Datentypen bei allen Eingaben richtig, die eingegebenen Daten dann aber inhaltlich nicht korrekt (z.B. Breite nicht im zulässigen Bereich), so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
"Hilfe,Hilfe",Uebungsaufgabe 15

Das,ist,ein,Test 6

Hasenfuss,Biegsamkeit 8

Ausgabedaten
Hilfe,Hilfe,Ue-
bungsaufgabe
10

Das,
ist,
ein,
Test
4

Hasen-
fuss,
Biegsam-
keit
6


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 Text < Text.i1 > Text.out1

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