PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - Palindromtest


CoconutKing
2008-03-27, 21:33:01
Als Aufgabe soll ich ein Paldindromtest machen.
Also z.B.:
Eingabe: Hannah oder reliefpfeiler
Ausgabe: Es ist ein Palindrom

Eingabe: hund
Ausgabe: es ist kein Palindrom

Das Programm läuft, nur nicht nach Vorgabe, diese war:

int isPalindrom(char line[])
{
int i;
int length;
....
}

Diese Grundgerüst soll man verwenden und keine weiteren lokalen variablen verwenden. das ist mein problem: ich brauch lokal noch ein char-array um das übergebene Array rückwärts abzuspeichern und dann beide array gegenläufig abzugleichen obs ein palindrom ist.

mir fällt keine lösung ein ohne das 2. lokal definierte array....
lengthOfString ist auch eine eigene funktion die einfach die länge des Strings ermittelt.
hier meine funktion:


int isPalindrom(char line[])
{
int i;
int length;
char palindrom[63];
length=lengthOfString(line);
//Umkopieren in 2. Array
for(i=0;i<length;i++)
{
palindrom[length-i]=line[i];
}
//Beide Array vergleichen
for(i=0;i<length;i++)
{
if(palindrom[i+1]==line[i])
{
return 1;
}
else
{
return 0;
}
}
}

noid
2008-03-27, 21:37:40
von Zeichen 0 bis Zeichen string-länge-halbe alle chars mit chars an position (string-länge - aktueller Index) vergleichen.

Hilft das? Umkopieren musst du nicht, nur dein Vergleich in der Schleife kann optimaler sein.

Misda
2008-03-27, 21:52:30
Habs mal mit Java gemacht, lässt sich vermutlich ähnlich in C adaptieren.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Main m1 = new Main();
while (true)
System.out.print(m1.isPalindrom(in.readLine().toCharArray())+"\n");

}

int isPalindrom(char line[]) {
int i;
int length;

length = line.length;

for (i = 0; i < length / 2; i++)
if (line[i] != line[(length - 1) - i])
return 0;

return 1;

}

}

CoconutKing
2008-03-27, 22:07:15
danke, geht.
stand einfach auf dem schlauch.