Program sprawdzający, czy napis jest palindromem

0

Witam Wszystkich Chciałem zapytać czy program który napisałem jest zrobiony dobrze jeśli nie prosił bym o Poprawienie i wytkniecie błedu.z Góry Dziekuje

Treść : Napisz funkcję, która dostaje jako argument napis, i zwraca 1 w przypadku
gdy napis jest palindromem1 oraz 0 w przeciwnym wypadku

Kod:

#include <stdio.h>

int dlugosc(char *napis)
{
    int d=0;
    while(napis[d]!='\0')
    d++;
    return d;
}

int porownanie(char *napis1, char *napis2)
{
    int i,x;
    if(dlugosc(napis1)!= dlugosc(napis2)) return 0;
    for(i=0;i<dlugosc(napis1);i++)
    {
        for(x=dlugosc(napis1);x>=0;x--)
        {
            if(napis1[i]!=napis2[x]) return 0;
            else return 1;
        }
    }
}
int main()
{
    int wyw;
    char napis1[]="kajak";
    char napis2[]="kajak";
    wyw=porownanie(napis1,napis2);
    printf("%d", wyw);
    return 0;
}
 
2
  1. Masz problem z i++ - http://4programmers.net/Forum/1101404
  2. Zapoznaj się z funkcją strlen()
  3. Jeżeli masz pętle z warunkiem: i<dlugosc(napis1) to ta funkcja dlugosc() odpala ci się na każdym kroku pętli.
  4. Zadanie mówi o przekazaniu jednego napisu
  5. Zadanie prosi o sprawdzenie czy napis jest palindromem twoja realizacja sprawdza czy jeden napis jest odwróconą wersją drugiego
0

Źle, bo nieoptymalnie.
W C istnieje funkcja strlen, nie potrzebujesz dwóch pętli do sprawdzenia czy jest palindromem.

1

Marne masz szanse z programowaniem skoro z takimi prostymi rzeczami sobie nie radzisz:

int ispalindrom(const char *str)
  {
   const char *p=str,*q=str;
   while(*q) ++q;
   while(p<--q) if(*(p--)!=*q) return 0;
   return 1;
  }

int main()
  {
   printf("%d",ispalindrom("kajak"));
   return 0;
  }
2

Jeśli to na ocenę to zaplusujesz robiąc to jednoprzebiegowo (bez znajomości długości):
http://www.liafa.univ-paris-diderot.fr/~displexity/Angers/mallmann.pdf

Edit: wywaliłem to drugie bo wymaga długości ciągu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1