import algds.IOUtils;
/**
* AlgDs, WS99, Aufgabe 21.
* Palindrome
*
* @author Christian Semrau, 29.11.1999, 25.12.1999
*
* Christian.Semrau@student.uni-magdeburg.de
*/
class ChS_Aufg21{
/**
* Liefert einen String, der nur die Buchstaben (klein) von s enthaelt.
*/
public static String filter(String s) {
String chars =
// enthaelt alle Zeichen, die der Filter "durchlassen" soll
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"+"abcdefghijklmnopqrstuvwxyz";
String f = "";
char c;
for (int i = 0; i < s.length(); )
if (chars.indexOf(c=s.charAt(i++))>=0)
f += c;
return f.toLowerCase();
}
public static void main(String[] args){
String s;
do{
System.out.println("Ein Palindrom bitte (oder auch nicht):");
s = IOUtils.readString(); // String einlesen
if (s.length() == 0) break; // leere Eingabe beendet
// Teil a)
System.out.println(reverse(s)); // rueckwaerts ausgeben
if (palindromic2(s))
System.out.println(" Ist ein exaktes Palindrom.");
else {
// Teil b)
System.out.println(filter(s)); // gefiltert ausgeben
if (palindromic2(filter(s)))
System.out.println(" Ist gefiltert ein Palindrom.");
else
System.out.println(" Ist kein Palindrom.");
}
}while (true);
} // main()
/**
* Liefert true, wenn s ein (exaktes) Palindrom ist, false wenn nicht.
* Kehrt den String um und vergleicht die beiden direkt miteinander.
*/
public static boolean palindromic(String s) {
return s.equals(reverse(s));
}
/**
* Liefert true, wenn s ein (exaktes) Palindrom ist, false wenn nicht.
* Vergleicht das erste Zeichen mit dem letzten, das zweite mit dem
* vorletzten, usw bis zur Mitte.
*/
public static boolean palindromic2(String s) {
for (int li=0, re=s.length()-1; li= 0; i--)
a += s.charAt(i);
return a;
}
} // class ChS_Aufg21