Sprawdzenie czy słowo jest palindromem

0

Wymyśliłem coś takiego, analizując to kilkadziesiąt razy wydaje mi się, że powinno działać jednak wyświetla ciągle, że podane słowo jest palindromem mimo, że nim nie jest.

#include <stdio.h>
#include <string.h>

void wczytaj_slowo(char *slowo)
{
    printf("Podaj slowo: ");
    scanf("%s",&slowo);
}

void sprawdz_czy_palindrom(char *slowo)
{
  int length = strlen(slowo);
  int start = 0;
  int end = length-1;

  while (start < end)
  {

    if (tolower(slowo[start]) != tolower(slowo[end]))
      printf("Podane slowo nie jest palindromem");
    else
    {
    start++;
    end--;
    }
  }
  printf("Podane slowo jest palindromem");;
}
  
int main()
{
    char word[256];
    wczytaj_slowo(word);
    sprawdz_czy_palindrom(word);

}
4

Wyświetlaniu co linijkę winne jest, no cóż, wyświetlanie co linijkę: w pętli masz printf("Podane slowo nie jest palindromem"); co iterację. Raczej chcesz mieć jakąś zmienną, która trzyma status sprawdzeń — zaczyna prawdziwa („słowo jest palindromem”), i jak któreś z porównań nie wyjdzie, to ją zmieniasz na fałszywą.

Na przyszłość — będzie Ci łatwiej takie problemy znajdować przy użyciu debuggera, niż forum.

0
Althorion napisał(a):

Wyświetlaniu co linijkę winne jest, no cóż, wyświetlanie co linijkę: w pętli masz printf("Podane slowo nie jest palindromem"); co iterację. Raczej chcesz mieć jakąś zmienną, która trzyma status sprawdzeń — zaczyna prawdziwa („słowo jest palindromem”), i jak któreś z porównań nie wyjdzie, to ją zmieniasz na fałszywą.

Na przyszłość — będzie Ci łatwiej takie problemy znajdować przy użyciu debuggera, niż forum.

Za bardzo nie wiem o co chodzi. Jeszcze tak próbuje, ale to samo..

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
void wczytaj_slowo(char *slowo)
{
    printf("Podaj slowo: ");
    scanf("%s",&slowo);
}
bool sprawdz_czy_palindrom(char *slowo)
{
int length = strlen(slowo);
  int start = 0;
  int end = length-1;
  while (start < end)
  {

    if ((slowo[start]) != (slowo[end]))
      return 0;
    else
    {
    start++;
    end--;
    }
  }
  return 1;
  }
int main()
{
    char word[256];
    wczytaj_slowo(word);
    if(sprawdz_czy_palindrom(word))
        puts("Podane slowo jest palindromem");
    else
        puts("Podane slowo NIE jest palindromem");
}
5

Bład jest przy wczytywaniu stringa, włącz ostrzeżenia kompilatora. Ja mam coś w rodzaju (kur'anie skopije)

kura

Update: scanf("%s",slowo); XD

0
bool isPalindrom(const char *str)
{
  for(int i=0,k=strlen(str)-1;i<k;++i,--k) if(toupper(str[i])!=toupper(str[k])) return 0;
  return 1;
}

Ale jak chcesz uwzględniać spacje (np: "Kobyła ma mały bok") to:

bool isPalindrom(const char *str)
{
  for(int i=0,k=strlen(str)-1;i<k;++i,--k)
  {
    if(str[i]==' ') ++k;
    else if(str[k]==' ') --i;
    else if(toupper(str[i])!=toupper(str[k])) return 0;
  }
  return 1;
}

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