Palindrom dla n wyrazów

0

Witam. Chciałbym napisać program, który na początku pyta się o liczbę wyrazów, użytkownik z klawiatury wpisuje te wyrazy( wszystkie od razu). Potem na ekranie wypisuje się listę słów które są palindromami oraz listę słów które nie są palindromami. Dla jednego słowa potrafię to zrobić w pętli, ale dla wielu już nie. Proszę o pomoc.

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

int pal(char *wyraz)
{
    int i, litera = strlen(wyraz);
    for(i = 0; i < litera/2; ++i)
        {
            if(wyraz[i] != wyraz[litera-i-1])
        	return 0;
        }
    return 1;
}

int main()
{
    int n, i;
    char slowo[10];

    printf("Podaj liczbe slow ");
    scanf("%d", &n);
    for (i=1; n>=i; ++i)
    {
    	printf("Wprowadz slowo  ");
        scanf("%s", slowo);
        if(pal(slowo) == 1)
        printf("palindrom\n", slowo);
        else
        printf("nie palindrom\n", slowo);
        }
    return 0;
}
0

Nie bardzo rozumiem. Przecież ten kod to właśnie robi...
http://ideone.com/tufGwy

0

Tylko że po wpisaniu słowa wypisuje od razu czy to jest palindrom czy nie. A ja bym chciał żeby wypisywało po wpisaniu wszystkich wyrazów dopiero listę czy poszczególne słowa są palindromami czy nie. Za bardzo nie wiem jak to zrobić.

0

A po co? Jeśli to zadanie na jakiegoś SPOJa/ sprawdzarkę to to jest bez znaczenia bo STDIN nie miesza się ze STDOUT. No ale jeśli musisz to po prostu zrób tablicę na te słowa i wczytuj do niej dane, a potem zrób drugą pętlę w której wywołujesz swoją funkcje do palindromów dla kolejnych słów z tablicy.

0

A mógłbyś napisać ten kod programu z tymi tablicami i pętlą? Bo mi się nie udaję.

0

Pokaż jak próbujesz to zrobić.

0
 #include <stdio.h>
#include <string.h>
 
int pal(char *wyraz)
{
    int i, litera = strlen(wyraz);
    for(i = 0; i < litera/2; ++i)
        {
            if(wyraz[i] != wyraz[litera-i-1])
                return 0;
        }
    return 1;
}


 
int main()
{

    int n, i;
    char slowo[10];
 
    printf("Podaj liczbe slow ");
    scanf("%d", &n);
    	char tab[n];
    for (i=1; n>=i; ++i)
    {
        printf("Wprowadz slowo  ");
        scanf("%s",tab[i]);
    }
     for (i=1; n>=i; ++i)
      if(pal(tab[i]==1)
        printf("palindrom\n", tab[i]);
        else
        printf("nie palindrom\n", tab[i]);
        
    return 0;
}
0

Brawo, stworzyłeś n-elementową tablicę znaków. Taka tablica pomiędzy maksymalnie "n" znaków. A ty chcesz mieć w niej n napisów o pewnej liczbie znaków. Widzisz tu pewien problem? Czemu więc nie zrobisz

char tab[n][100];

?

1
#include <stdio.h>
#include <string.h>
 
int pal(const char *wyraz)
  {
   int p=0,k=strlen(wyraz)-1;
   while(p<k) if(wyraz[p++]!=wyraz[k--]) return 0;
   return 1;
  }
 
int main()
  {
   int n, i;
   printf("Podaj liczbe slow: ");
   scanf("%d",&n);
   char tab[n][100]; // lepiej to robić dynamicznie
   for(i=0;i<n;++i) // indeksacja od 0
     {
      printf("Wprowadz slowo: ");
      scanf("%99s",tab[i]); // aby nie było mazania po pamięci
     }
   printf("palindromy:\n");
   for(i=0;i<n;++i) if(pal(tab[i])) printf("%s\n",tab[i]);
   printf("\nnie palindromy:\n");
   for(i=0;i<n;++i) if(!pal(tab[i])) printf("%s\n",tab[i]);
   return 0;
  }
0

Poprawiłem. Wyskoczyły mi jeszcze 2 błędy które są związane z porównywaniem zmiennych. Ustawiłem wszędzie gdzie mogłem Char, ale błędy dalej są. cannot convert 'bool' to 'char*' for argument '1' to 'char pal(char*)' oraz ISO C++ forbids comparison between pointer and integer [-fpermissive]

0

_13th_Dragon Dzięki za pomoc.

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