Advertisement
filip710

Z3.1: Moj "string.h"

Jul 9th, 2016
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.84 KB | None | 0 0
  1. U ovom zadatku potrebno je napisati svoj jednostavni 'library' koji će vam pomoći u radu sa stringovima.
  2.  
  3. 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.
  4.  
  5. Sve funkcije koje trebate implementirati počinju sa my (myreadline, mystrlen...).
  6.  
  7. 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");
  8.  
  9. Zabranjeno je korištenje string.h biblioteke i ctypes biblioteke. Svu traženu implementaciju trebate napisati samostalno.
  10.  
  11. Ova zadaća ne zahtjeva nikakav kompliciran ulaz podataka te ju možete riješiti i testirati lokalno, na svom računalu.
  12.  
  13. Obratite pozornost na '\n' koji fgets učitava na kraj učitanog stringa ukoliko koristite fgets za učitavanje.
  14.  
  15. //PROGRAM.C
  16. #include<stdio.h>
  17. #include "mystr.h"
  18.  
  19. int main(void)
  20. {
  21.   char a[100], b[100], c[100], d[100];
  22.  
  23.   //funkcija treba ucitati liniju teksta sa stdin-a u predani buffer
  24.   //puts("Upisi tri stringa odvojena enterom");
  25.   printf("a:\n");
  26.   myreadline(a);
  27.   printf("b:\n");
  28.   myreadline(b);
  29.   printf("c:\n");
  30.   myreadline(c);
  31.   printf("\n");
  32.  
  33.   //funkcija treba vratiti duzinu stringa
  34.   printf("Duzina stringa a: %d\n", mystrlen(a));
  35.   printf("Duzina stringa b: %d\n", mystrlen(b));
  36.   printf("Duzina stringa c: %d\n", mystrlen(c));
  37.  
  38.   //funkcija treba prekopirati sadržaj prvog predanog stringa u drugi, vraca
  39.   //koliko je znakova prekopirano
  40.   int n = mystrcpy(a, d);
  41.   printf("\nString  a je prekopiran u d i glasi: %s\n", d);
  42.   printf("Prekopirano je %d znakova\n", n);
  43.  
  44.   //funkcija treba provjeriti jesu li stringovi jednaki, vraca int
  45.   if ( mystrcmp( a, b) )
  46.     printf("Stringovi a i b su jednaki!\n");
  47.   else
  48.     printf("Stringovi a i b su razliciti!\n");
  49.  
  50.   //funkcija treba provjeriti je li prvi string sadrzan unutar drugoga, vraca
  51.   //index na kojem se nalazi prvi znak pronadjenog stringa, ili negativan broj
  52.   //ako nije pronadjen
  53.   puts("\nPretraga je li neki string dio nekog drugog stringa");
  54.   puts("Unesi prvo string u kojem trazim, a nakon toga string koji trazim:");
  55.   //char big[] = "Ovo je neki veliki string u kojem trazim!";
  56.   //char sub[] = "velik";
  57.   char big[100], sub[100];
  58.   printf("'glavni' string:\n"); myreadline(big);
  59.   printf("'podstring': \n"); myreadline(sub);
  60.   int loc = mysubstring(big,sub);
  61.   if (loc >= 0)
  62.     printf("String '%s' se u stringu '%s' nalazi na %d. mjestu.\n", sub, big, loc);
  63.   else
  64.     printf("String '%s' nije dio stringa '%s'\n", sub, big);
  65.  
  66.   char e[100], f[100], g[100];
  67.   //ucitaj tekst u e i kopiraj ga u f i g
  68.   printf("\nUpisi tekst kojem ces mijenjati slova: \n");
  69.   myreadline(e);
  70.   mystrcpy(e,f);
  71.   mystrcpy(e,g);
  72.  
  73.   //funkcija treba sva mala slova u stringu postaviti na velika slova
  74.   mytoupper(e);
  75.   printf("VELIKA SLOVA: %s\n", e);
  76.  
  77.   //funkcija treba sva velika slova postaviti u mala
  78.   mytolower(f);
  79.   printf("mala slova: %s\n", f);
  80.  
  81.   //funkcija treba sva velika slova prebaciti u mala, a sva mala u velika
  82.   myinvertcase(g);
  83.   printf("InVertIRANA sloVA: %s\n", g);
  84.  
  85.  
  86.   return 0;
  87. }
  88.  
  89. //FUNKCIJE
  90. #include "mystr.h"
  91. #include<stdio.h>
  92.  
  93.  
  94. //ucitavanje stringa
  95. void myreadline(char *a)
  96. {
  97.     scanf ("%[^\n]%*c", a);
  98. }
  99.  
  100. //duljina stringa
  101. int mystrlen(char *a)
  102. {
  103.     int i;
  104.     int broj=0;
  105.     for(i=0;a[i]!='\0';i++)
  106.     {
  107.         broj++;
  108.     }
  109.     return broj;
  110. }
  111.  
  112. //kopiranje stringa
  113. int mystrcpy(char *a, char *d)
  114. {
  115.     int i;
  116.     int broj=0;
  117.     for(i=0;a[i]!='\0';i++)
  118.     {
  119.         d[i]=a[i];
  120.         broj++;
  121.     }
  122.     d[i]='\0';
  123.     return broj;
  124. }
  125.  
  126. //uspoređivanje stringa
  127. int mystrcmp(char *a, char *b)
  128. {
  129.     int i;
  130.     for(i=0;a[i]!='\0';i++)
  131.     {
  132.         if(a[i]==b[i]) return 1;
  133.         else return 0;
  134.     }
  135. }
  136.  
  137. // provjera substringa
  138. int mysubstring(char *src, char *str)
  139. {
  140.     int i, j, firstOcc;
  141.     i = 0, j = 0;
  142.  
  143.     while (src[i] != '\0')
  144.     {
  145.         while (src[i]!=str[0] && src[i]!='\0')
  146.             i++;
  147.  
  148.         if(src[i]=='\0')
  149.             return (-1);
  150.  
  151.         firstOcc = i;
  152.  
  153.         while (src[i] == str[j] && src[i] != '\0' && str[j] != '\0') {
  154.             i++;
  155.             j++;
  156.         }
  157.  
  158.         if (str[j] == '\0')
  159.             return (firstOcc);
  160.         if (src[i] == '\0')
  161.             return (-1);
  162.  
  163.         i = firstOcc + 1;
  164.         j = 0;
  165.     }
  166. }
  167.  
  168. void mytoupper(char *e)
  169. {
  170.     int i;
  171.  
  172.     for(i=0;e[i]!='\0';i++)
  173.     {
  174.         if(e[i]>96 && e[i]<123)
  175.             e[i]-=32;
  176.     }
  177. }
  178.  
  179. void mytolower(char *e)
  180. {
  181.     int i;
  182.  
  183.     for(i=0;e[i]!='\0';i++)
  184.     {
  185.         if(e[i]>64 && e[i]<91)
  186.             e[i]+=32;
  187.     }
  188. }
  189.  
  190. void myinvertcase(char *e)
  191. {
  192.     int i;
  193.  
  194.     for(i=0;e[i]!='\0';i++)
  195.     {
  196.         if(e[i]>64 && e[i]<91)
  197.             e[i]+=32;
  198.         else if(e[i]>96 && e[i]<123)
  199.             e[i]-=32;
  200.     }
  201. }
  202.  
  203. //HEADER
  204. #ifndef MYSTR_H
  205. #define MYSTR_H
  206.  
  207. void myreadline(char *a);
  208. int mystrlen(char *a);
  209. int mystrcpy(char *a, char *d);
  210. int mystrcmp(char *a, char *b);
  211. int mysubstring(char *big, char *sub);
  212. void mytoupper(char *e);
  213. void mytolower(char *e);
  214. void myinvertcase(char *e);
  215.  
  216. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement