Problem mit Palindrom

Cherry07

Mitglied
Hallo,

habe ein Problem mit meinem C-Code. Das Programm sollte eine Zeichenkette überprüfen, ob es ein Palindrom ist, also ein Wort welches vor- und rückwärts gelesen das selbe ergibt. Falls es ein Palindrom ist soll eine 1 zurückgeben werden, falls nicht eine 0.

LG
cherry07

Hier mal der Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char ist_palindrom (char p[999])
{
    char h[999];
    int i, j;
    int erg;
    int laenge_p = strlen (p);
    int laenge_h = strlen (h);

    //Umwandeln von p
    for (i=laenge_p; i>0; i--)
    {
        h[j] = p[i-1];
        j++;
    }
    h[j]='\0';

        if(strcmp(p,h)==0)
        {
            erg=1;
            printf("Palindrom");
            //Zeichenkette ist ein Palindrom
        }
        else
        {
            erg=0;
            printf("Kein Palindrom");
        }

    return erg;
}

int main (void)
{
    int s;
    printf("s: ");
    gets(s);
    ist_palindrom(s);
    return 0;
}
 
Zuletzt bearbeitet:
Da mir deine Frage nicht ganz klar ist ,gebe ich dir einfach mal einen vollständigen Sourcecode :

C++:
//Palindrom (Anna Otto Lagerregal)
#include <conio.h>
#include <iostream.h>
#include <ctype.h>
#include <stdio.h>
#define MAX 1000
using namespace std;
//--------------------------------------------
char upper (char buchstabe)
{

    if(isupper(buchstabe))
    {
        return buchstabe;
    }
    else
    {
        return (buchstabe - 32);
    }
}
        


bool Isletter (char input)
{
    if ((input >=65 && input<=90)||(input>=97 && input <= 122))
    {
        return true;
    }
    return false;
}

bool Erkennen (char* input)
{
    int stringlaenge = 0, i,k=0,l=0;
    char vorwaerts[MAX], rueckwaerts[MAX];
    
    memset(vorwaerts, 0,MAX);
    memset(rueckwaerts, 0,MAX);
    
    stringlaenge = strlen(input);
    
    for (i=0;i<stringlaenge;i++)
    {
        if (Isletter(input[i]))
        {
            vorwaerts[k]=upper(input[i]);
            k++;
        }
        if (Isletter (input[stringlaenge-(i+1)]))
       {
            rueckwaerts[l]=upper(input[stringlaenge-(i+1)]);
            l++;
        }
    }
    for (i=0;i<stringlaenge;i++)
    {
        if(vorwaerts[i]!=rueckwaerts[i])
        {
            return false;
        }
    }
    return true;
}

Die Funktion Erkennen, ist quasi das Main es gibt halt true und false zurück statt 1 und 0^^
 
Zuletzt bearbeitet von einem Moderator:
Hi

das tuts auch:

Code:
int palindrom(char *p)
{
    j=strlen(p);
    for(i=0;i<(j/2);i++)
   {
      if(p[i]!=p[j-i-1])
         return 0;
   }
   return 1;
}
 
Kommt darauf an, für das teil ist groß und Kleinschreibung relevant und ausserdem funktioniert es nicht mit ganzen sätzen, die ein Palindrom sind^^.
Sry, falls ich was falsches gesagt habe
 
Zurück