Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- U ovom zadatku potrebno je napisati svoj jednostavni 'library' koji će vam pomoći u radu sa stringovima.
- Zadan vam je program.c dokument, koji #includea "mystr.h" datoteku zaglavlja. U program.c datoteci nalazi se main() funkcija koja je ujedno i ulaz u vaš program. U mainu() su pozivi funkcija koji trebaju obaviti određeni posao. Ovo su funkcije koje ćete pisati u vašim 'mystr.h' i 'mystr.c' datotekama. Za funkcije nećete dobiti detaljne prototipe i opis, već je vaš zadatak 'skužiti' iz poziva funkcije kakve parametre prima i kakva im je povratna vrijednost. Datoteku s main funkcijom ne možete mijenjati (zapravo možete, ali će grader ignorirati vaše promjene). U ostale dvije datoteke možete pisati što god želite.
- Sve funkcije koje trebate implementirati počinju sa my (myreadline, mystrlen...).
- Napomene: U ovom zadatku grader ocjenjuje sav izlaz iz vašeg programa, što znači da funkcije koje ćete implementirati unutar mystr.c datoteke ne smiju ništa ispisivati na stdout. Sav ispis se odvija u main.c dijelu programa. Ukoliko si želite ispisivati poruke radi debuggiranja, možete ih ispisivati na stderr korištenjem fprintf(stderr, "tekst poruke");
- Zabranjeno je korištenje string.h biblioteke i ctypes biblioteke. Svu traženu implementaciju trebate napisati samostalno.
- Ova zadaća ne zahtjeva nikakav kompliciran ulaz podataka te ju možete riješiti i testirati lokalno, na svom računalu.
- Obratite pozornost na '\n' koji fgets učitava na kraj učitanog stringa ukoliko koristite fgets za učitavanje.
- //PROGRAM.C
- #include<stdio.h>
- #include "mystr.h"
- int main(void)
- {
- char a[100], b[100], c[100], d[100];
- //funkcija treba ucitati liniju teksta sa stdin-a u predani buffer
- //puts("Upisi tri stringa odvojena enterom");
- printf("a:\n");
- myreadline(a);
- printf("b:\n");
- myreadline(b);
- printf("c:\n");
- myreadline(c);
- printf("\n");
- //funkcija treba vratiti duzinu stringa
- printf("Duzina stringa a: %d\n", mystrlen(a));
- printf("Duzina stringa b: %d\n", mystrlen(b));
- printf("Duzina stringa c: %d\n", mystrlen(c));
- //funkcija treba prekopirati sadržaj prvog predanog stringa u drugi, vraca
- //koliko je znakova prekopirano
- int n = mystrcpy(a, d);
- printf("\nString a je prekopiran u d i glasi: %s\n", d);
- printf("Prekopirano je %d znakova\n", n);
- //funkcija treba provjeriti jesu li stringovi jednaki, vraca int
- if ( mystrcmp( a, b) )
- printf("Stringovi a i b su jednaki!\n");
- else
- printf("Stringovi a i b su razliciti!\n");
- //funkcija treba provjeriti je li prvi string sadrzan unutar drugoga, vraca
- //index na kojem se nalazi prvi znak pronadjenog stringa, ili negativan broj
- //ako nije pronadjen
- puts("\nPretraga je li neki string dio nekog drugog stringa");
- puts("Unesi prvo string u kojem trazim, a nakon toga string koji trazim:");
- //char big[] = "Ovo je neki veliki string u kojem trazim!";
- //char sub[] = "velik";
- char big[100], sub[100];
- printf("'glavni' string:\n"); myreadline(big);
- printf("'podstring': \n"); myreadline(sub);
- int loc = mysubstring(big,sub);
- if (loc >= 0)
- printf("String '%s' se u stringu '%s' nalazi na %d. mjestu.\n", sub, big, loc);
- else
- printf("String '%s' nije dio stringa '%s'\n", sub, big);
- char e[100], f[100], g[100];
- //ucitaj tekst u e i kopiraj ga u f i g
- printf("\nUpisi tekst kojem ces mijenjati slova: \n");
- myreadline(e);
- mystrcpy(e,f);
- mystrcpy(e,g);
- //funkcija treba sva mala slova u stringu postaviti na velika slova
- mytoupper(e);
- printf("VELIKA SLOVA: %s\n", e);
- //funkcija treba sva velika slova postaviti u mala
- mytolower(f);
- printf("mala slova: %s\n", f);
- //funkcija treba sva velika slova prebaciti u mala, a sva mala u velika
- myinvertcase(g);
- printf("InVertIRANA sloVA: %s\n", g);
- return 0;
- }
- //FUNKCIJE
- #include "mystr.h"
- #include<stdio.h>
- //ucitavanje stringa
- void myreadline(char *a)
- {
- scanf ("%[^\n]%*c", a);
- }
- //duljina stringa
- int mystrlen(char *a)
- {
- int i;
- int broj=0;
- for(i=0;a[i]!='\0';i++)
- {
- broj++;
- }
- return broj;
- }
- //kopiranje stringa
- int mystrcpy(char *a, char *d)
- {
- int i;
- int broj=0;
- for(i=0;a[i]!='\0';i++)
- {
- d[i]=a[i];
- broj++;
- }
- d[i]='\0';
- return broj;
- }
- //uspoređivanje stringa
- int mystrcmp(char *a, char *b)
- {
- int i;
- for(i=0;a[i]!='\0';i++)
- {
- if(a[i]==b[i]) return 1;
- else return 0;
- }
- }
- // provjera substringa
- int mysubstring(char *src, char *str)
- {
- int i, j, firstOcc;
- i = 0, j = 0;
- while (src[i] != '\0')
- {
- while (src[i]!=str[0] && src[i]!='\0')
- i++;
- if(src[i]=='\0')
- return (-1);
- firstOcc = i;
- while (src[i] == str[j] && src[i] != '\0' && str[j] != '\0') {
- i++;
- j++;
- }
- if (str[j] == '\0')
- return (firstOcc);
- if (src[i] == '\0')
- return (-1);
- i = firstOcc + 1;
- j = 0;
- }
- }
- void mytoupper(char *e)
- {
- int i;
- for(i=0;e[i]!='\0';i++)
- {
- if(e[i]>96 && e[i]<123)
- e[i]-=32;
- }
- }
- void mytolower(char *e)
- {
- int i;
- for(i=0;e[i]!='\0';i++)
- {
- if(e[i]>64 && e[i]<91)
- e[i]+=32;
- }
- }
- void myinvertcase(char *e)
- {
- int i;
- for(i=0;e[i]!='\0';i++)
- {
- if(e[i]>64 && e[i]<91)
- e[i]+=32;
- else if(e[i]>96 && e[i]<123)
- e[i]-=32;
- }
- }
- //HEADER
- #ifndef MYSTR_H
- #define MYSTR_H
- void myreadline(char *a);
- int mystrlen(char *a);
- int mystrcpy(char *a, char *d);
- int mystrcmp(char *a, char *b);
- int mysubstring(char *big, char *sub);
- void mytoupper(char *e);
- void mytolower(char *e);
- void myinvertcase(char *e);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement