Programmieraufgabe
-
Palindrom (von griechisch palíndromos = rückwärts laufend) ist ein Wort oder ein Satz, der von vorne und hinten gelesen gleich bleibt oder einen Sinn ergibt. Das Palindrom ist eine spezielle Form des Anagramms.
Quelle wikipedia.deDie Aufgabe besteht darin ein Programm zu schreiben das sowohl Satz als auch Wortpalindrome erkennt und dann entweder eine positive oder eine negative Rückmeldung liefert.
Bonusaufgabe: Eine Textdatei wird eingelesen, alle Palindrome die vorkommen ausgegeben (natürlich in alphabetischer Reihenfolge Augenzwinkern ) und die Anzahl von Palindromen soll ebenfalls ausgegeben werden. Dieser Zusatz sollte nur Wordpalindrome erkennen wer es trotzdem schafft auch Satzpalindrome zu erkennen
soll das gerne machen mir fällt auf anhieb selbst keine elegante Lösung ein Augenzwinkern .Beispielausgabe des Programm:
<< Geben sie ein Wort oder einen Satz ein:
> aha
<< "aha" ist ein PalindromLinks zur Unterstützung :
http://de.wikipedia.org/wiki/Liste_von_Wortpalindromen
http://de.wikipedia.org/wiki/Liste_von_SatzpalindromenAlle Ansätze sind erwünscht auch absolute Anfänger können gerne ihre Lösungen posten auch wenn diese vielleicht etwas unfertig sind. Die geposteten Vorschkäge bitte ausreichend kommentieren bzw. erklären damit die anderen auch etwas davon haben.
EDIT: Satzzeichen werden bei Satzpalindromen ignoriert. Die Aufgabe bezieht sich auf Palindrome die rückwärts und vorwärts gelesen identisch sind.
-
XFlorian schrieb:
Palindrom (von griechisch palíndromos = rückwärts laufend) ist ein Wort oder ein Satz, der von vorne und hinten gelesen gleich bleibt oder einen Sinn ergibt.
Ich glaub, das krieg ich nicht auf die Reihe. o_O
-
ODER einen Sinn ergibt? Also ist jeder sinnvolle Satz ein Palindrom
*scnr
Hier mal bizzi Code, den ich vor langer Zeit geschrieben habe (hatte keinen Bock da jetzt passende Teile rauszukopieren). Vielleicht hilfts ja
public abstract class Pali { /** * @return true, wenn s ein Palindrom ist, false sonst */ public static boolean isPalindrome(String s) { s = filter(s); for (int i = 0; i < s.length() / 2; i++) if (s.charAt(i) != s.charAt(s.length() - i - 1)) return false; return true; } /** * Dasselbe rekursiv */ public static boolean isPalindrome1(String s) { return isPalindrome2(filter(s)); } private static boolean isPalindrome2(String s) { return s.length() < 2 || s.charAt(0) == s.charAt(s.length() - 1) && isPalindrome2(s.substring(1, s.length() - 1)); } /** * filter leistet folgendes * a) filter eliminiert alle Nicht-Buchstaben * b) filter wandelt alle übrigen Zeichen in Kleinbuchstaben um */ public static String filter(String s) { char[] result = new char[s.length()]; int cnt = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (Character.isLetter(c)) result[cnt++] = Character.toLowerCase(c); } return new String(result, 0, cnt); } }
-
Werden nun doch Hausaufgaben gelöst hier?
-
Leos oel.
Bye, TGGC (Pipe my World.)
-
true