metoda za menjanje znaka

2

metoda za menjanje znaka

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

Napisano: 26 Jan 2015 19:04

Vidim, fali mi zagrada. I u funkciji strlen sam ppgresio takodje.

Dopuna: 26 Jan 2015 19:16

Rekao si mi da ta funkcija at treba da ima 2 parametara. Jedan da bude indeks a drugi sam karakter. Ne razumem sta treba da radim sa tim indeksom? Sta bi ta funckija trebala da vraca kao rezultat? Ja sam stavio da vraca char* ali sta.

Dopuna: 26 Jan 2015 20:59

Mozes li mi pomoci?



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

Napisano: 26 Jan 2015 21:09

crusher ::Ne razumem sta treba da radim sa tim indeksom? Sta bi ta funckija trebala da vraca kao rezultat? Ja sam stavio da vraca char* ali sta.Indeks (prvi argument) je pozicija karaktera koji menjaš, a sam karakter (drugi argument) je onaj kojim menjaš karakter na zadatoj poziciji. Funkcija može da bude i bez povratne vrednosti, tj. void, jer sve obavljaš unutar same funkcije. Ako pak želiš da odradiš dodelu koristeći operator =, moralo bi da se malo promisli. U jeziku C++ možeš da predefinišeš operator dodele za određenu klasu, ali bi tako nešto u ovom slučaju zahtevalo da wrap-uješ char u neki klasni tip, pa da njega koristiš. Svakako, to je dodatno i nepotrebno komplikovanje, dovoljno je da odradiš ovu funkciju sa dva parametra i to je to.

Dopuna: 26 Jan 2015 21:20

Ustvari, moglo bi i ovako:
char* at(int a) {    return name + a; } //... //Upotreba bi bila ovakva *(rec.at(0)) = 'F';



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

Napravio sam ove ali ne daje prave rezultate. Ja stavim X a funkcija ga pretvori u R kada pokrenem program. Evo pogledaj kod:

#include <iostream> class Test{    char* niz; public:    Test(){ niz = 0; }    Test(char* a){ niz = new char [strlen(a) + 1]; strcpy(niz, a); }    ~Test(){ delete [] niz; }    int length();    char at(int a);    void at1(int a, char x);    char* at2(int a); }; int Test::length(){    int a, b;    for(a = 0; *niz != '\0'; *niz++, a++)       ;    for(b = a; b > 0; b--)       *niz--;    return a; } char Test::at(int a){    return *niz + a; } void Test::at1(int a, char x){    *(niz + a) = x; } char* Test::at2(int a){    return niz + a; } int main() {    Test rec("Programiranje");    std::cout << "Rec sadrzi " << rec.length() << " znakova." << std::endl;    std::cout << "Znak: " << rec.at(0) << std::endl;    rec.at1(2, 'X');    std::cout << "Novo slovo: " << rec.at(2) << std::endl;    *(rec.at2(2)) = 'X';    std::cout << "Novo slovo: " << rec.at(2) << std::endl;    system("PAUSE");    return 0; }

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

Funkcija at(int) ti ne valja uopšte, zato i "pretvara" tako kako kažeš...

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

Jeste, u pravu si. Zaboravio sam zagrade. Evo sada radi kako treba.
Hteo sam jos nesto da te pitam. Kada bih hteo da uradim ovo isto sa operatorom = kako sam rekao u prvom postu, da li bih morao da koristim preopterecenje operatora?

Inace, hvala ti na tvojoj pomoci i ulozenom vremenu. Wink

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

Preopterećenje? Lele, nemoj da prevodiš overloading tako, mnogo nakaradno zvuči. Mr. Green Dovoljno je da kažeš predefinisanje. Da, moralo bi tako ako ti se ne sviđa ovako sa referenciranjem/dereferenciranjem. Operator dodele možeš da predefinišeš samo za klasne tipove, pa bi zato morao da napraviš tzv. wraper klasu za koju bi predefinisao operator dodele.

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

Napisano: 27 Jan 2015 8:58

Meni tako pise u knjizi kao 4. poglavlje, pa zato i ja koristim taj izraz.
Inace, hvala ti na svemu Smile

Dopuna: 27 Jan 2015 14:14

Ajde da ne otvaram temu nego ovde da vidis moj novi problem. Napravio sam program koji vrsi nekoliko funkcija nad stringovima, ali imam jedan problem. Kada god pokrenem program, izadje mi neki error. Ali nije error kao greska u sintaksi nego kada ukucam ime posle pokretanja programa i pretisnem Enter izadje greska.

Mislim da je ili problem u metodi empty() ili u funkciji Unesi_Ime. Gde gresim?

#include <iostream> #include <string> class Test{    char* name; public:    Test() { name = 0; }    Test(char* a) { name = new char [strlen(a) + 1]; strcpy(name, a); }    ~Test() { delete [] name; }    int length();    char at(int a);    char* at1(int a);    int empty(); }; int Test::length(){    int a, b;    for(a = 0; *name != '\0'; *name++, a++)       ;    for(b = a; b > 0; *name--, b--)       ;    return a; } char Test::at(int a){    return *(name + a); } char* Test::at1(int a){    return name + a; } int Test::empty(){    if(*(name + 0) == '\0')       return 1;    return 0; } Test Unesi_Ime(std::string); int main() {    Test ime, prezime;    std::string psi, psp;    ime = Unesi_Ime("Unesite Vase ime: ");    prezime = Unesi_Ime("Unesite Vase prezime: ");    psi = ime.at(0);    psp = ime.at(0);    std::cout << "Dobrodosli " << ime.at1(0) << " " << prezime.at1(0) << " u program." << std::endl;    std::cout << "Vase ime ima " << ime.length() << " znakova." << std::endl;    std::cout << "Vase prezime ima " << prezime.length() << " znakova." << std::endl;    std::cout << "Vasi inicijali su: " << psi << "." << psp << "." << std::endl;    system("PAUSE");    return 0; } Test Unesi_Ime(std::string Pniz) {    Test unos;    char ime[20];    char* p;    bool neispravan_unos;    do{       std::cout << std::endl << Pniz << std::endl;       gets(ime);       p = ime;       unos = p;              if(unos.empty()){          std::cerr << "Niste uneli ime - pokusajte ponovo!" << std::endl;          neispravan_unos = true;       }       else          neispravan_unos = false;    } while(neispravan_unos);    return unos; }       

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

Šta drugo da ti kažem sem ovoga - postavi nekoliko prekidnih tačaka, pa dibager u ruke. smešak Krajnje je vreme da naučiš da koristiš isti. Wink

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

Pokusao sam, ali kad dodje do koda std::string psi, psp ulazi u neke fajlova vazdan i nikako da se vrati nazad. Zato sam i postavio ovde jer nisam mogao da se snadjem sa dibagerom. Je l' moze da se nekako taj deo koda preskoci ili treba nesto drugo?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Samo sam bacio pogled i koliko vidim, promenljivoj tipa Test dodeljuješ vrednost tipa char* u 67. liniji. Ako bih bio na tvom mestu, tu bih počeo da tražim grešku.

Ko je trenutno na forumu
 

Ukupno su 898 korisnika na forumu :: 26 registrovanih, 4 sakrivenih i 868 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amaterSRB, Andrija357, bigfoot, DragoslavS, drimer, Fulcrum, maiden6657, MB120mm, mikrimaus, Milometer, Misha V, ozzy, panzerwaffe, pein, repac, royst33, S2M, savaskytec, Steeeefan, Sumadija34, Trpe Grozni, Vlada1389, Webb, wolf431, wulfy