Zadanie z plikami

0

Witam juz od dlugiego czasu borykam sie z takim oto zadaniem:

Napisz program, który przekształci zadany plik tekstowy w drugi plik tekstowy wg
podanych poniżej zasad.
Program ten powinien być uruchamiany z trzema parametrami: nazwą analizowanego
pliku, nazwą pliku, w którym należy zapisać wynik oraz dodatkowym słowem
slowo_specjalne. Wywołanie programu:
./program plik.in plik.out slowo_specjalne
Jeśli plik wejściowy nie istnieje lub nie otworzył się poprawnie, należy zgłosić błąd.
Zasady tworzenia pliku wyjściowego:
• Wszystkie litery duże należy zamienić na małe, chyba, że należą do wczytanego
słowa specjalnego (wtedy nie należy ich modyfikować); samo słowo specjalne składa
się co najwyżej z 8 znaków alfanumerycznych (tzn. liter lub cyfr).
• Wszystkie cyfry należy zmniejszyć o ’1’ (cyfrę ’0’ należy zamienić się na ’9’), chyba,
że należą do wczytanego słowa specjalnego (wtedy nie należy ich modyfikować).
• Należy opuścić tekst znajdujący się wewnątrz komentarza, tzn. wewnątrz znaków /*
... */. Komentarze mogą być zagłębione. Można założyć, że są one w tekście użyte
poprawnie.
Dodatkowo program powinien zliczyć liczbę wystąpień słowa specjalnego. Liczbę tę
należy wypisać na standardowe wyjście.

Mój kod wygląda następująco:

#include<stdio.h>
#include<stdlib.h>
int main (int argc, char *argv[])
{
int i,j,k,d,s; // k=ilosc komentarzy, d= dlugosc slowa klucznowego, s=ilosc wystapien slowa kluczoweg
while (argv[3][d++]!='\0')
{
FILE p1=fopen (argv[1], "r");
FILE p2=fopen (argv[2], "w+");
if (p1==NULL)
{
printf("nie ma takiego pliku");
return -1;
}
char szukaj[512];
while (fgets(szukaj,512,p1)!='\0') // Tworze pętle która zaczyna szukać mi komentarzy
{ // jesli znajdzie to nie zapisuje ich do pliku 2
for(i=0;szukaj[i]!='\0'; i++)
{
if(szukaj[i]=='/' && szukaj[i+1]=='
')
{
k++;
i++;
continue;
}
if (k>0)
{
if(szukaj[i]=='
' && szukaj[i+1]=='/')
k--;
i++;

                          }
              }
              else
              {
          if ((strncmp(szukaj + i, argv[3], d-1) == 0) &&                                 //szukam slowa kluczowego w danym pliku wejsciowym
                                                  !((szukaj[i +d-1] > 47 &&
                                                  szukaj[i+d-1] < 58) ||
                                                  (szukaj[i+d-1] > 64 &&
                                                   szukaj[i+d-1] < 91) ||
                                                  (szukaj[i+d-1] > 96 &&
                                                   szukaj[i+d-1] < 123))&& !
                                                  ((szukaj[i -1] > 47 &&
                                                   szukaj[i -1] < 58) ||
                                                  (szukaj[i -1] > 64 &&
                                                  szukaj[i -1] < 91) ||
                                                  (szukaj[i -1] > 96 &&
                                                   szukaj[i -1] < 123)))


          {
                  s++;
                  fputs(argv[3],p2);
                  i+=d-1;
          }
          else if (szukaj[i]>64 && szukaj[i]<91)                    //jesli znajde jakas cyfre to zmniejszam jej wartosc o 1
                  szukaj[i]+=32;

          else if (szukaj[i]>48 && szukaj[i]<58)
                  szukaj[i]-=1;
          if (szukaj[i]=48)                       //cyfe 0 zamieniam na 9
          szukaj [i]=57;

          fprintf(p2,"%c",szukaj[i]);

         }
         }
         }
         printf ("%d\n",s);             // wypisuje liczbe wystapien slowa specjalnego
          fclose(p2);
          fclose(p1);



  return 0;

}

I cos w nie dziala a ja nie mam pojęcia co. szukałem, zmieniałem, czytałem i za nic nie moge poprawnie zrobic tego zadania. Czy ktos byłby na tyle miły i rzucił na to okiem?

0

Wg mnie zadanie jest niezbyt precyzyjne, załóżmy że podano słowo: ALA
Zaś zawartość pliku jest ALA MA KOTA. AlaMOS
Jaka ma być zawartość pliku wynikowego?
Co ma zostać wyświetlono na wyjściu?

0

Tutaj mam jeden przyklad jak powinien dzialac ten program

Dla pliku zawierającego poniższy tekst i wywołania: ./program plik.in plik.out PuchateK
1.Kon Trojanski, 2.Krowa Trojoka; 3.Kubus PuchateK
4. Malownicza-Marchewka--/* kredka w ksztalcie marchewki /-5. Sciorany kot /
gumka w ksztalcie kota / 5.Puch 6.Kubus Puchatek 7.Kubus PuchateK,
8. KAPucha, KubusPuchateK 9.PuPuPuchateK
Kim jestes Ty, /
/* zaglebiony komentarz PuchateK / / stojacy nad przepascia!?
Liczba mieszkancow Puław /w roku 2009/: "754 854".
Pewnego dnia PuchateK wyszedl na spacer,/
az zaszedl na polane w srodku lasu,
/
a posrodku tej polanki rosl wielki dab
i z samego jego wierzcholka dochodzilo glosne bzykanie.*/ Kubus Puchatek
usiadl sobie pod tym debem, */ podparl glowe na lapkach i zaczal rozmyslac.

Poprawną odpowiedzią jest:
3
oraz plik:
0.kon trojanski, 1.krowa trojoka; 2.kubus PuchateK
3. malownicza-marchewka---4. sciorany kot 4.puch 5.kubus puchatek 6.kubus PuchateK,
7. kapucha, kubuspuchatek 8.pupupuchatek
kim jestes ty, stojacy nad przepascia!?
liczba mieszkancow puław /w roku 1998/: "643 743".
pewnego dnia PuchateK wyszedl na spacer, podparl glowe na lapkach i zaczal rozmyslac.

0

Zapoznaj się z: isalpha(), isdigit(), tolower(), strstr(), autoamat deterministyczny

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