Ne znam u cemu je problem sa programom u C

Ne znam u cemu je problem sa programom u C

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Imam zadatak da napravim funkciju squeeze(s1, s2) koja brise znak u s1 ako odgovara znaku u s2 i da je iskoristim u programu. Kada pokrenem program, dobijam kao da sam samo iskopirao s1 na izlaz. Evo koda.

#include <stdio.h> #include <stdlib.h> char *squeeze(char *, char *); int main(void) {    static char s1[] = {"Ja sam Viktor Prgomet."};    static char s2[] = {"Ja imam 14 godina."};    printf("%s\n", squeeze(s1, s2));    system("PAUSE");    return EXIT_SUCCESS; } char *squeeze(char *s1, char *s2) {    char *p, *q;    for(p = s1, q = s2; *p != '\0'; p++)       if(*p != *q++)          *p = *p;    return s1; }

Molim vas mi pomognite u vezi sa ovim programom. Very Happy



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Šta bi trebalo da radi sledeća naredba:
 *p = *p; Question Wink



offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Tu je greska u tom programu, ali ne znam sta treba da stavim umesto nje.
U tom delu funkcije, trebalo bi u pokazivac p upise znak ako je znak u *p razlicit od znaka u *q(to je napisano u if).

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Pazi ovako, zadatak nije dovoljno precizno definisan, tako da rešenje nije jedinstveno.

Elem, može i da se radi na način na koji si ti odabrao, tj. tako da se briše karakter iz stringa s1 na i-toj poziciji ukoliko se isti taj karakter nalazi na i-toj poziciji u string s2. E sad, u samom telu petlje treba da imaš tri pokazivača p, q i recimo r. p pokazuje na tekući karakter (karakter koji upoređuješ) stringa s1, q na tekući karakter stringa s2, a r na poziciju u s1 na koju je potrebno smestiti karakter, isti karakter ukoliko je *p != *q, dok ukoliko je *p == *q ne radiš ništa već prelaziš na sledeći karakter (inkrementiraju se p i q). Na kraju svega toga je potrebno zatvoriti string s1 kako ne bi štampao preostale karaktere. Kod je ovakav:
#include <stdio.h> #include <stdlib.h> char *squeeze(char *, char *); int main(void) {    static char s1[] = { "Ja sam Viktor Prgomet." };    static char s2[] = { "Ja imam 14 godina." };    printf("%s\n", squeeze(s1, s2));    system("PAUSE");    return EXIT_SUCCESS; } char *squeeze(char *s1, char *s2) {    char *p, *q, *r;    for (r = p = s1, q = s2; *p != '\0'; p++, q++) {       if (*p != *q)          *r++ = *p;    }    *r = '\0';    return s1; }

offline
  • Pridružio: 15 Maj 2012
  • Poruke: 396

Sada radi, haval ti puno. Very Happy

Nego, i mislio sam da treba da se deklarise novi pokazivac, ali nisam razmisljao pa nisam znao kako da je inicilizujem. Sada si mi razjasnio i hvala ti. Very Happy

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

I principu, i ne mora da bude pokazivač u pitanju. Može se raditi i sa int promenljivom koja će čuvati pomeraj između pozicije tekućeg karaktera i pozicije na koju je potrebno smestiti karakter. Ma, mogućnosti su ogromne... Very Happy

Ko je trenutno na forumu
 

Ukupno su 3394 korisnika na forumu :: 22 registrovanih, 6 sakrivenih i 3366 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Asteker, coaa, cojapop, Dzambas, ekipo26, ghoost, Gogi_avio, gorankuba, Jozo74, kovrovgz, Lepi Jova, Lotus, maksi007, Mzee, opt1, Ran, royst33, superwhy, suton, Tanjagre, Troja, Trpe Grozni