Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. char zamjena(char* pas1, char* pas2);
  6. char podjela(char* pas, char* dio, char* ostatak);
  7.  
  8. int main()
  9. {
  10.     char pas1[10], pas2[10];
  11.  
  12. /*
  13.     Zasto funkcija "gets" ?
  14.     -Zato sto nam to omogucava da unosimo cijeli string sve do znaka "enter".
  15.     Kod scanf funcije unosimo do prvog "white space-a" ili razmaka. To mozemo rijesiti tako
  16.     da radimo formatirani unos kao npr scanf(%[A-Za-z ], tada unosi sva slova(velika i mala) i razmake.
  17.     Kada dodje do nekog drugog znaka ne nastavlja 'pamtiti' ostatak.
  18. */
  19.     gets(pas1);
  20.     gets(pas2);
  21.  
  22.     zamjena(pas1, pas2);
  23.  
  24.     printf("Pasmina1:\n");
  25.     puts(pas1);
  26.  
  27.     printf("\nPasmina2:\n");
  28.     puts(pas2);
  29.  
  30.     return 0;
  31. }
  32. char zamjena(char *pas1, char* pas2)
  33. {
  34.     char *dio1, *ostatak1, *dio2, *ostatak2;
  35.  
  36. /*
  37.     Rezervirali smo lokaciju od 10 box-ova u memoriji i postavili sve na vrijednost '0' .
  38.     Mogli smo rezervirati i s malloc-om ali kod takvog tipa alokacije mozemo dobiti nepredvidjene
  39.     rezultate, jer moze rezervirati neko mjesto koje vise ne koristimo ali na njemu je ostala
  40.     nekakva vrijednost. Nastao bi problem jer nikad ne bi dosli do /0 znaka tj. kraja stringa, sve
  41.     dok ne 'ispucamo' rezerviranu memoriju.
  42. */
  43.  
  44.     dio1 = (char*)calloc(10, (sizeof(char)));
  45.     ostatak1 = (char*)calloc(10, (sizeof(char)));
  46.  
  47.     dio2 = (char*)calloc(10, (sizeof(char)));
  48.     ostatak2 = (char*)calloc(10, (sizeof(char)));
  49.  
  50.     podjela(pas1, dio1, ostatak1);
  51.     podjela(pas2, dio2, ostatak2);
  52.    
  53. /*
  54.     Za dobijene dijelove od jednog stringa, spajamo ih u novi string da dobijemo novu pasminu.
  55.     Prvo radimo kopiranje 1. sloga i onda povezivanje s ostatkom stringa od suprotnog psa.
  56.     Ovo sve radimo preko pointera jer je lakse i jednostavnije iz razloga sto ne mozemo iz zadane funkcije
  57.     vratiti vise vrijednosti, vec samo jednu. Pointeri nam upravo daju tu mogucnost, da vratimo vise vrijednosti.
  58. */
  59.    
  60.     strcpy(pas1, dio1);
  61.     strcat(pas1, ostatak2);
  62.  
  63.     strcpy(pas2, dio2);
  64.     strcat(pas2, ostatak1);
  65.  
  66. }
  67.  
  68. char podjela(char *pas, char* dio, char* ostatak)
  69. {
  70.    
  71. /*
  72.     Ova funkcija nam sluzi da zadani string podijelimo na dva dijela, u ovom slucaju je podjela
  73.     na prvom slogu.
  74.     Vrijednosti saljemo s pointerima tako da se u funkciji koja je pozvala ovu, dobiju vrijednosti podjele.
  75.     Podijele smo oznacili sa "dio"(prvi slog) i "ostatak" (ostali dio nakon prvog sloga).
  76. */
  77.  
  78.     int i=1;
  79.     char *zadnje;
  80.  
  81.     zadnje = (char*)calloc(10, (sizeof(char)));
  82.  
  83. /*
  84.     U iducem isjecku radimo pretragu po stringu i provjeravamo samoglasnike jer zelimo
  85.     rastaviti string kod prvog sloga.
  86. */
  87.  
  88.     while(pas)
  89.     {
  90.         if(pas[i] == 'a' || pas[i] == 'e' || pas[i] == 'i' || pas[i] == 'o' || pas[i] == 'u')
  91.         {
  92.             if(pas[i+1] == 'a' || pas[i+1] == 'e' || pas[i+1] == 'i' || pas[i+1] == 'o' || pas[i+1] == 'u')
  93.             {
  94.                 /*Kopiramo dio prvog sloga*/
  95.                 strncpy(dio, pas, i+2);
  96.                
  97.                 /*Ostatak spremamo u string "zadnje" i nakon toga kopiramo ga u string "ostatak"
  98.                     Potom izlazimo iz cijele petlje (break) jer ne zelimo da se dalje vrti, samo uzima vrijeme,
  99.                     a mi smo dobili trazeno.
  100.                 */
  101.                 zadnje = strchr(pas, pas[i+2]);
  102.                 strcpy(ostatak, zadnje);
  103.                 break;
  104.             }
  105.  
  106. /*
  107.     Isti je postupak kao u prethodnom if-u samo sto ovaj else vrijedi ako iza nadjenog samoglasnika dolazi suglasnik.
  108.     U gore navedenom if-u provjeravamo ako iza samoglasnika dolazi opet samoglasnik, u tom slucaju uzimamo oba u prvi slog.
  109.  
  110. */
  111.             else
  112.             {
  113.                 strncpy(dio, pas, i+1);
  114.                 zadnje = strchr(pas, pas[i+1]);
  115.                 strcpy(ostatak, zadnje);
  116.                 break;
  117.             }
  118.         }
  119.     }
  120.  
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement