rendered paste body#include <stdio.h>
#include <string.h>
#include <malloc.h>
char* czytaj(FILE *plik,int n)
{
char *s, *ptr;
int i;
s=ptr=(char*)malloc(n*sizeof(char));
while(fgets(ptr,n,plik))
{
for(i=0;i<(n-1);i++)
{
if(ptr[i]=='\n')
{
ptr[i]='\0';
return s;
}
}
s=realloc(s, i+n-1);
ptr=s+i+1;
}
}
long max(char nazwa[])
{
FILE *p;
long max=0; //maksymalna dlugosc slowa w pliku
long rozmiar; //zawiera liczbe bajtow od poczatku do konca
char *s; //dlogosc bedzie rowna liczbeie bajtow
p=fopen(nazwa,"r");
fseek(p,0,SEEK_END);
rozmiar=ftell(p);
rewind(p);
s=(char*)malloc(rozmiar*sizeof(char));
while(!feof(p))
{
fscanf(p,"%s",s);
if(max<strlen(s))
max=strlen(s);
}
fclose(p);
free(s);
return max;
}
int czy_palindrom(char palin[])
{
int p=0,k;//p - poczatek k - ustawiamy na koniec lancucha
int czy_palin=0; //jesli 1 to tekst jest palindromem
k=strlen(palin)-1;
while(p<=((strlen(palin))/2))
{
if(palin[p]==palin[k])
{
p++;k--;
czy_palin=1;
}
else
{
czy_palin=0;
break;
}
}
return czy_palin;
}
void wypisz()
{
FILE *plik;
char *nazwa_pliku;
char *yes_or_no=NULL;// TAK / NIE
char *p;//Do niej zapisuje lancuch z pliku
int wyswietl;//jesli równa 1 to wyswietlamy tekst zawarty w p
int pocz=1; //wyswietlam tekst "Oto Palindromy"
long maximum; //maksymalna dlugosc najwiekszego palindromu
int ilosc=0; //ilosc palindromów
repeat:
printf("Podaj nazwe pliku jaki chcesz otworzyc: ");
nazwa_pliku=czytaj(stdin,21);
strcat(nazwa_pliku,".txt");
plik=fopen(nazwa_pliku,"r");
if(plik==NULL)
{
system("cls");
printf("Nie ma takiego pliku !!!\n");
printf("Czy chcesz podac nazwe jeszcze raz (TAK/NIE): ");
yes_or_no=czytaj(stdin,4);
system("cls");
if((strcmp(yes_or_no,"TAK")==0)||(strcmp(yes_or_no,"tak")==0))
goto repeat;
else
{
system("cls");
if(strcmp(yes_or_no,"NIE")==0||strcmp(yes_or_no,"nie")==0)
printf("\nGOODBYE :)");
else
printf("\nDziwny wybor :)\n SEE YOU");
}
}
else
{
system("cls");
if(yes_or_no!=NULL);
free(yes_or_no);
maximum=max(nazwa_pliku);
p=(char*)malloc(maximum*sizeof(char));
while(fscanf(plik,"%s",p)!=EOF)
{
wyswietl=czy_palindrom(p);
if(wyswietl==1)
{
if(pocz==1)
{
printf("\n\n\nOto Palindromy:\n ");
pocz=0;
}
printf("%s ",p);
ilosc++;
}
}
if(pocz==1)
printf("\n\n\nW tekscie nie wystapily palindromy\n\n");
else
{
if(ilosc==1)
{
printf("\n\n\nW pliku ");
system("cd");
printf("\\%s znajduje sie %i palindrom\n",nazwa_pliku,ilosc);
}
else
{
if(ilosc>=2&&ilosc<=4)
{
printf("\n\n\nW pliku ");
system("cd");
printf("\\%s znajduja sie %i palindromy\n",nazwa_pliku,ilosc);
}
else
{
printf("\n\n\nW pliku ");
system("cd");
printf("\\%s znajduje sie %i palindromow\n",nazwa_pliku,ilosc);
}
}
}
fclose(plik);
free(nazwa_pliku);
}
free(p);
printf("\n\n\n");
system("pause");
}
int main()
{
printf("\nProgram wypisuje wszystkie palindromy znajdujace sie wpliku.\n\n");
wypisz();
return 0;
}