Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- char zamjena(char* pas1, char* pas2);
- char podjela(char* pas, char* dio, char* ostatak);
- int main()
- {
- char pas1[10], pas2[10];
- /*
- Zasto funkcija "gets" ?
- -Zato sto nam to omogucava da unosimo cijeli string sve do znaka "enter".
- Kod scanf funcije unosimo do prvog "white space-a" ili razmaka. To mozemo rijesiti tako
- da radimo formatirani unos kao npr scanf(%[A-Za-z ], tada unosi sva slova(velika i mala) i razmake.
- Kada dodje do nekog drugog znaka ne nastavlja 'pamtiti' ostatak.
- */
- gets(pas1);
- gets(pas2);
- zamjena(pas1, pas2);
- printf("Pasmina1:\n");
- puts(pas1);
- printf("\nPasmina2:\n");
- puts(pas2);
- return 0;
- }
- char zamjena(char *pas1, char* pas2)
- {
- char *dio1, *ostatak1, *dio2, *ostatak2;
- /*
- Rezervirali smo lokaciju od 10 box-ova u memoriji i postavili sve na vrijednost '0' .
- Mogli smo rezervirati i s malloc-om ali kod takvog tipa alokacije mozemo dobiti nepredvidjene
- rezultate, jer moze rezervirati neko mjesto koje vise ne koristimo ali na njemu je ostala
- nekakva vrijednost. Nastao bi problem jer nikad ne bi dosli do /0 znaka tj. kraja stringa, sve
- dok ne 'ispucamo' rezerviranu memoriju.
- */
- dio1 = (char*)calloc(10, (sizeof(char)));
- ostatak1 = (char*)calloc(10, (sizeof(char)));
- dio2 = (char*)calloc(10, (sizeof(char)));
- ostatak2 = (char*)calloc(10, (sizeof(char)));
- podjela(pas1, dio1, ostatak1);
- podjela(pas2, dio2, ostatak2);
- /*
- Za dobijene dijelove od jednog stringa, spajamo ih u novi string da dobijemo novu pasminu.
- Prvo radimo kopiranje 1. sloga i onda povezivanje s ostatkom stringa od suprotnog psa.
- Ovo sve radimo preko pointera jer je lakse i jednostavnije iz razloga sto ne mozemo iz zadane funkcije
- vratiti vise vrijednosti, vec samo jednu. Pointeri nam upravo daju tu mogucnost, da vratimo vise vrijednosti.
- */
- strcpy(pas1, dio1);
- strcat(pas1, ostatak2);
- strcpy(pas2, dio2);
- strcat(pas2, ostatak1);
- }
- char podjela(char *pas, char* dio, char* ostatak)
- {
- /*
- Ova funkcija nam sluzi da zadani string podijelimo na dva dijela, u ovom slucaju je podjela
- na prvom slogu.
- Vrijednosti saljemo s pointerima tako da se u funkciji koja je pozvala ovu, dobiju vrijednosti podjele.
- Podijele smo oznacili sa "dio"(prvi slog) i "ostatak" (ostali dio nakon prvog sloga).
- */
- int i=1;
- char *zadnje;
- zadnje = (char*)calloc(10, (sizeof(char)));
- /*
- U iducem isjecku radimo pretragu po stringu i provjeravamo samoglasnike jer zelimo
- rastaviti string kod prvog sloga.
- */
- while(pas)
- {
- if(pas[i] == 'a' || pas[i] == 'e' || pas[i] == 'i' || pas[i] == 'o' || pas[i] == 'u')
- {
- if(pas[i+1] == 'a' || pas[i+1] == 'e' || pas[i+1] == 'i' || pas[i+1] == 'o' || pas[i+1] == 'u')
- {
- /*Kopiramo dio prvog sloga*/
- strncpy(dio, pas, i+2);
- /*Ostatak spremamo u string "zadnje" i nakon toga kopiramo ga u string "ostatak"
- Potom izlazimo iz cijele petlje (break) jer ne zelimo da se dalje vrti, samo uzima vrijeme,
- a mi smo dobili trazeno.
- */
- zadnje = strchr(pas, pas[i+2]);
- strcpy(ostatak, zadnje);
- break;
- }
- /*
- Isti je postupak kao u prethodnom if-u samo sto ovaj else vrijedi ako iza nadjenog samoglasnika dolazi suglasnik.
- U gore navedenom if-u provjeravamo ako iza samoglasnika dolazi opet samoglasnik, u tom slucaju uzimamo oba u prvi slog.
- */
- else
- {
- strncpy(dio, pas, i+1);
- zadnje = strchr(pas, pas[i+1]);
- strcpy(ostatak, zadnje);
- break;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement