/* Zadatak 3 - Nikola Trajkovic, 232/2000 */ #include <stdio.h> int strlength(char s[]); int strcomp(char s1[], char s2[]); void strcopy(char s1[], char s2[], char c1, char c2, int i); int atoi(char s[]); void ime_mail(char s[], char ime[], char mail[]); main(int argc, char *argv[]) { char line[100], kontakt[100]="", ime[50]="", mail[50]="", indeks[10]="", temp[10], p1[5], p2[5]; long int br=0, bz=0; int p[40],i=0,j=0,poz; do { gets(line); bz+=strlength(line); br++; if (poz=strcomp(line,"<!KONTAKT")) strcopy(line,kontakt,' ', '>',poz-1); else if (poz=strcomp(line, "<!IDENT_STUDENT")) strcopy(line, indeks, ' ', '>',poz-1); else; } while (!strcomp(line, "<BODY")); while (gets(line)!=NULL) { br++; bz+=strlength(line); if (poz=strcomp(line, "<!---")) { strcopy(line, temp, '=', '-',poz-1); p[i++]=atoi(temp); } } ime_mail(kontakt, ime, mail); strcopy(argv[1], p1, '-', '-',0); strcopy(argv[1], temp, '-', '.',0); strcopy(temp, p2, '-', '\0',0); if (atoi(p1)!=p[0] || atoi(p2)!=p[i-1]) printf("NEKOREKTNO IME DATOTEKE!\n"); if (ime[0]!='\0') printf("Ime studenta: %s\n",ime); else printf("NEDOSTAJE IME STUDENTA!\n"); if (mail[0]!='\0') printf("E-mail studenta: %s\n", mail); else printf("NEDOSTAJE E-MAIL STUDENTA!\n"); if (indeks[0]!='\0')printf("Broj dosijea: %s\n",indeks); else printf("NEDOSTAJE BROJ INDEKSA!\n"); if (argv[1]!='\0') printf("Naziv datoteke: %s\n", argv[1]); else printf("NEDOSTAJE NAZIV DATOTEKE!\n"); printf("Pocetna strana: %d\n", p[0]); printf("Zavrsna strana: %d\n", p[i-1]); printf("Broj redova: %ld Broj znakova: %ld\n",br,bz); printf("Spisak brojeva strana:\n"); for(j=0 ; j<i ; j++) printf("%d ",p[j]); } /* funkcija koja odredjuje duzinu stringa */ int strlength(char s[]) { int i; for(i=0 ; s[i] ; i++); return (i); } /* f-ja proverava da li se u stringu s1 nalazi string s2, */ /* tako da ne razlikuje velika i mala slova. Ako se string s2 */ /* ne pojavljuje u s1 f-ja vraca 0 u suprotnom vraca poziciju */ /* na kojoj se nalazi s2 (1,2,....) */ int strcomp(char s1[], char s2[]) { int i,j,p; char a,b; for(i=0; s1[i] ; i++) { for (j=0, p=1 ; s2[j] && p ; j++) { if (s1[i+j]>='a' && s1[i+j]<='z') a=s1[i+j]-('a'-'A'); else a=s1[i+j]; if (s2[j]>='a' && s2[j]<='z') b=s2[j]-('a'-'A'); else b=s2[j]; p=(a==b); } if (p) return (i+1); } return (0); } /* Kopira iz s1 u s2 sve sto se nalazi izmedju znakova c1 i c2 */ /* pocevsi od od pozicije i u stringu s1. To je bilo potrebno zbog toga sto se */ /* etiketa moze pojaviti bilo gde u redu a ne samo na pocetku reda. */ void strcopy(char s1[], char s2[], char c1, char c2, int i) { int j; for( ; s1[i] && s1[i]!=c1 ; i++); if (s1[i]=='\0') s2[0]='\0'; else { for(++i, j=0 ; s1[i] && s1[i]!=c2 ; i++, j++) s2[j]=s1[i]; s2[j]='\0'; } } /* f-ja konvertuje string u ceo broj. f-ja je ogranicena na */ /* pozitivne brojeve ali to u ovom slucaju nije bitno jer /* brojevi strana mogu biti samo pozitivni /* int atoi(char s[]) { int n=0,i=0; while (s[i]) n=n*10+(s[i++]-'0'); return (n); } /* f-ja razdvaja ime i prezime od e-mail adrese */ /* i smesta ih u odgovarajuce promenljive */ void ime_mail(char s[], char ime[], char mail[]) { int i,j; for(i=strlength(s)-1 ; i>=0 && s[i]!='@' ; i--); if (i==-1) { mail[0]='\0'; for(j=0 ; s[j] ; j++) ime[j]=s[j]; ime[j]='\0'; } else { for(--i ; s[i]!=';' && i>=0; i--); if (i==-1) { mail[0]='\0'; for(j=0 ; s[j] ; j++) ime[j]=s[j]; s[j]='\0'; } else { for(j=0 ; j<i ; j++) ime[j]=s[j]; ime[j]='\0'; if (s[i+1]==' ') i+=2; else ++i; for(j=0 ; s[i+j] ; j++) mail[j]=s[i+j]; mail[j]='\0'; } } }