Wie kann man in C ohne die string.h-Bibliothek prüfen, ob die Eingabe einem Palindrom entspricht?
Hey,
wie kann man in C ohne die string.h-Bibliothek prüfen, ob die Eingabe einem Palindrom entspricht?
Hier der Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LAENGE 80
void laenge(char , int , int);
int palindrom();
int main()
{
char string[LAENGE] = { 1 };
int count = 0, kleinb = 90, palindrom = 0;
printf("Vor dem Dienstag kommt der Montag.\n");
printf("Gebe deinen Text bitte ein : \n");
gets(string);
laenge(string, &count, kleinb);
printf("Buchstaben in gross: %s\n", string);
printf("Die Stringlaenge: %d\n", count);
return 0;
}
void laenge(char string [], int count, int kleinb)
{
for (int i = 0; i < LAENGE; i++) {
if (string[i] != 0) {
(count)++;
}
if (string[i] > kleinb) {
string[i] = string[i] - 32;
}
}
}
int palindrom()
{
}
2 Antworten
Man kann sich das Leben natürlich unnötig schwer machen ;-).
char *s="Otto";
char *e;
for(e=s;*e!=NULL;++e) if (isupper(*e)) *e=tolower(*e);
So konvertierst Du alles zu Kleinbuchstaben und Dein zweiter Pointer steht am Ende des Strings (naja, fast).
Um festzustellen, ob ein Palindrom vorliegt, kannst Du dann einfach *s mit *e vergleichen und bei Übereinstimmung s und e um jweils 1 Schritt aufeinander zubewegen. Dann überlegst Du Dir noch die passende Abbruchbedingung und solltest fertig sein.
------
Für tolower und isupper benötigst Du lediglich ctype.h.
Wandle alle Buchstaben in Groß- oder Kleinbuchstaben um. Dann schaust du, ob du ausgehend von außen immer Wortpaare findest.
Beispiel:
neben
n - n
e - e
Sofern das Wort eine ungerade Anzahl an Buchstaben hat, kannst du den Buchstaben in der Mitte ignorieren.