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 1520 korisnika na forumu :: 119 registrovanih, 9 sakrivenih i 1392 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 15694 - dana 01 Feb 2026 12:23

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: alberto, Aster Blistok, bavar357, belov, berste23, bestguarder, black venom, Bobrock1, bojank, brufen, BWG, CCCP, ccoogg123, celt, Chainsaw, Cvexi, cvrle312, dankisha, darkojbn, debeli, dekiz, djoli, Dorijan Grej, draganca, draganl, Dukelander, eighty-one, Ercomero, EXIT78, FileFinder, Filip1, Goksi95, GveX, HawX, Ilija Grubor, Ilija84, Jeremiah, jerome75, jodzula, Khaless, kljajajunior, Komentator, Kruger, kuntakinte, kybonacci, Lance Guest, Litostroton, lucko1, luka35, M74AB3, MarijaC84, MaschinenPistole, maxim_von_burdengate, Md84, mercedesamg, metallac777, Milan1996, milanpetkovicv, milenko crazy north, milivoje_vatrogasac, Milometer, mino bosanac, Mis uz pusku, mist-mist, mm1811, nekdo, neko iz mase, nevjerna beba, niksa517, Nmr, Ognjen D., Pekman, Pero, Pero Petković, Petrusci, Pewac21, PlayerOne, proka1ng, rakivan, raykan, Robin, rodoljub, royst33, ruma, SD izvidjac, SDsd, Seeker, septembar, Sharpshooter, silikon, Sin Boskic, Slingshot, Smiljkovich, Smor, stagezin, suton, Tajpan, tecataki, The_new_Statesman, theBorer, TRAVUNIJA, TRZH92, tvlada, Uros Cuore Sportivo, Valter071, vathra, VJ, VNVK, Vojkan Petrovic, volimpivuvolimrakiju, VOŽD, vuksa72, Vzor50, xAlex2, Zmaj Tolak, Zoran1959, zule2, Zuna77, Žoržo