All pastes #37675 Raw Edit

Mine

public text v1 · immutable
#37675 ·published 2006-01-20 21:49 UTC
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;// 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;
     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
     {
         system("cls");
         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;
}