Sie müssen ein Programm schreiben, das Wörter in einer Textfolge silbiert, indem Sie sie durch einen Bindestrich trennen. Das wäre eine Menge Arbeit, daher möchten Sie einige Teile überspringen, hauptsächlich, weil Sie keine Tabelle mit den Aussprachen haben möchten, die für einen perfekten Algorithmus erforderlich sind. Sie möchten es auch so kurz (und damit unlesbar und nicht wartbar) wie möglich machen, um sich für diesen Auftrag zu rächen.
Sie haben zwei Möglichkeiten:
- Schreiben Sie ein Programm, das die Zeichenfolge von STDIN übernimmt und das Ergebnis an STDOUT ausgibt.
- Schreiben Sie eine Funktion, die die Zeichenfolge als einzelnen Parameter verwendet und das Ergebnis zurückgibt.
Spezifikation
- In diesem Fall bedeutet Zeichenfolge ein beliebiges Zeichenfolgen-ähnliches Konstrukt in der Sprache Ihrer Wahl (Byte-Arrays, Zeichen-Arrays, Zeichenfolgen ...).
- Vokale sind
a, e, i, o, u - Die angegebene Zeichenfolge enthält
1 <= n <= 10Wörter, wobei jedes1 - 30Zeichen eine Länge zwischen Zeichen einschließlich enthält. Ihre Ausgabe sollte aus Wörtern bestehen, die mit einem Bindestrich versehen sind. - Alle Buchstaben sind Kleinbuchstaben und Wörter werden immer durch Leerzeichen getrennt. Somit besteht die Eingabe aus Zeichen
[a-z ] - Wenden Sie Regeln in der Reihenfolge ihrer Wichtigkeit an.
- Wenn ein Wort geteilt wird, beginnen Sie erneut mit der rechten Worthälfte.
Regeln für die Silbenbildung in der Reihenfolge ihrer Wichtigkeit
Zwei aufeinanderfolgende gleiche Vokale zählen als ein (dh. feetNur ein Vokal, sondern beatund findinghaben zwei). Jede Silbe hat genau einen Vokal, daher gibt es für jeden Vokal eine Silbe.
- Wenn das ganze Wort nur vier Buchstaben hat, geben Sie es unverändert zurück. (Überspringen Sie dies für den Rest des Wortes)
- Wenn das Wort nur einen Vokal hat, geben Sie das Wort unverändert zurück.
- Wenn das Wort zwei aufeinanderfolgende Vokale hat, teilen Sie zwischen ihnen (dh
diaspora->di-as-po-ra) - Wenn zwei oder mehr Konsonanten zwischen zwei Vokalen (gleich oder verschieden) stehen, teilen Sie nach dem ersten Konsonanten (dh
sis-ter), es sei denn, der Konsonantenteil istck. In diesem Fall teilen Sie das Wort danach. (dhnickel->nick-el) - Wenn a
yzwischen zwei Vokalen steht, teilen Sie das Wort danach (zBpaying->pay-ing). - Wenn ein Konsonant zwischen zwei Vokale (gleich oder verschieden) kommt, teilen Sie vor dem Konsonanten (dh
dra-gon). - Geben Sie das Wort unverändert zurück, wenn keine Unterteilung möglich ist.
Ich habe diese Regeln gewählt, weil sie problemlos rekursiv angewendet werden können und keine Aussprache-Tabellen erfordern. Daher sind sie nicht genau und zum Beispiel ist Regel 5 oft nicht korrekt. Im Allgemeinen ist es jedoch so.
Beispiel
In: hello world
Out: hel-lo world
In: have a nice day
Out: have a nice day
In: pour some nickel and xenon there
Out: pour some nick-el and xe-non the-re
lua
x-e-non? Referenz für Regel 4?