SHOW:
|
|
- or go back to the newest paste.
1 | /* Napisite funkciju | |
2 | char *izvrsi1(char* s) | |
3 | koja prvo provjerava je li argument s oblika aRMb, gdje su a i b neki (pod)stringovi koji se sastoje samo od malih | |
4 | slova, te ako nije, vraca nul-pointer. U suprotnom, vraca dinamicki alociranu kopiju stringa b iz koje je (ako postoji) | |
5 | izbacena posljednja pojava podstringa a. Argument ne smijete mijenjati. Duljina argumenta nije odozgo ogranicena. | |
6 | Primjer: izvrsi1("xyRMxfxygxyt") vraca "xfxygt". */ | |
7 | ||
8 | #include <stdio.h> | |
9 | #include <stdlib.h> | |
10 | #include <string.h> | |
11 | #include<ctype.h> | |
12 | char *izvrsi1(char* s){ | |
13 | int i, d_a = 0, d_b = 0, pozicija_r; | |
14 | for(i = 0; s[i] ='\0'; ++i){ | |
15 | - | if ((s[i] = 'R')&&(s[i+1]=='M')) pozicija_r = i; |
15 | + | if ((s[i] = 'R')&&(s[i+1]=='M')){ |
16 | pozicija_r = i; | |
17 | ++i; | |
18 | } | |
19 | else if (!islower(s[i])) return NULL; | |
20 | } | |
21 | int n = i; | |
22 | d_a = pozicija_r ; | |
23 | d_b = n - d_a - 2; | |
24 | char *a, *b; | |
25 | a=(char*)malloc((d_a+1)*sizeof(char)); | |
26 | b=(char*)malloc((d_b+1)*sizeof(char)); | |
27 | ||
28 | for(i = 0; i < d_a; ++i) a[i] = s[i]; | |
29 | a[d_a]= '\0'; | |
30 | ||
31 | int j = 0; | |
32 | for(i = d_a+2; i < n; ++i) b[j++] = s[i]; | |
33 | b[d_b]= '\0'; | |
34 | j=0; | |
35 | int pozicija = d_b; | |
36 | for(i = d_b-1; i >= 0; --i) | |
37 | if (b[i] ==a[j]){ | |
38 | pozicija = i; | |
39 | break; | |
40 | } | |
41 | char *copy_b; | |
42 | if (pozicija == d_b){ | |
43 | copy_b =(char*)malloc((d_b+1)*sizeof(char)); | |
44 | for(i = 0; i < d_b; ++i) | |
45 | copy_b[i] = b[i]; | |
46 | copy_b[d_b]='\0'; | |
47 | ||
48 | } | |
49 | else{ | |
50 | copy_b =(char*)malloc((d_b-d_a+1)*sizeof(char)); | |
51 | j = 0; | |
52 | for(i = 0; i < d_b; ++i){ | |
53 | if(i == pozicija) i = i+d_a; | |
54 | copy_b[j++] = b[i]; | |
55 | } | |
56 | copy_b[d_b-d_a+1]='\0'; | |
57 | } | |
58 | free(a); | |
59 | free(b); | |
60 | return copy_b; | |
61 | } | |
62 | int main(void){ | |
63 | char *z=izvrsi1("xyRMxfxygxyt"); | |
64 | if(z)puts(z),free(z); | |
65 | return 0; | |
66 | } |