metoda za menjanje znaka

1

metoda za menjanje znaka

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

Napisao sam kod koji mi kaze koliko znakova ima neka rec i koji je znak po redu od pocetka. Trebam i da napisem da ta ista metoda at() moze i da menja znak. Np. da napisem rec.at(0) = 'X'; i posle kada budem trazio da mi izbacu celu rec, da izbaci tu rec samo sa tim promenjenim znakom.
Evo koda koji sam napisao ali ne znam sta treba da dodam da bi mogao da menjam znak.

#include <iostream> using namespace std; class Test{    char* name; public:    Test() { name = 0; }    Test(char* a) { name = a; }    ~Test() { delete [] name; }    inline int length(){       int a, b;       for(a = 0; *name != '\0'; *name++, a++)          ;       for(b = a; b > 0; b--)          *name--;       return a;    }    inline char at(int a){       return *(name + a);    } }; int main() {    Test rec = "Test";    cout << "Duzina reci: " << rec.length() << endl;    cout << "Znak: " << rec.at(2) << endl;    system("PAUSE");    return 0; }



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

Obzirom da je povratna vrednost funkcije at vrednost, a ne pokazivač, ni na koji način sa ovakvim kodom to ne možeš da postigneš. Najjednostavnije rešenje je da napiraviš novu funkciju at sa dva parametra, gde je jedan parametar indeks, a drugi sam karakter.

Takođe, u C/C++ se sa stringovima ne radi na način na koji si ti napisao konstruktor. Ovako si samo pokazivač name postavio da ukazuje na neki string, i nemaš apsolutno nikakvu kontrolu nad tim stringom. Umesto toga je potrebno kreirati novi string (dakle rezervisati novu memoriju) i prekopirati zadati string u novokreirani string.



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

Sad cu da napravim funkciju kako si mi rekao.

Nego, ako bih uradio ovo sa stringom kako si mi rekao, kako bih onda mogao da rukujem sa tim stringom kao sa pokazivacima ili indeksima? Kako bih onda mogao da sa tim stringom da rukujem u ovoj funkciji at sto je vec napisana?

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

crusher ::Kako bih onda mogao da sa tim stringom da rukujem u ovoj funkciji at sto je vec napisana?Potpuno isto. Smile Razlika bi bila jedino u tome što jedino ti (objekat koji poziva funkciju, odnosno objekat čiji je to string) ima mogućnost manupulacije nad stringom.

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

Cini mi se da se ne razumemo medjusobno.
Da li kada kazes string mislis da napravim promenljivu ovako: std::string name ili nesto drugo?

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

char* je sasvim ok.

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

Napisano: 26 Jan 2015 17:37

Stvarno ne razumem sta mislis time sto si mi rekao da trebam da napravim string pa da zadati string prekopiram u novonapravljeni string. Sta mislis da uradim?

Dopuna: 26 Jan 2015 17:48

Ne razumem jer sam na napravio string u klasi char* name i onda u konstruktoru parametar char* a i onda taj a prekopirao u name. Kako si ti mislio?

Dopuna: 26 Jan 2015 17:59

hmm, da nisi mozda mislio nesto ovako:

class Teskt{ char* niz; public: Tekst(char* a){ niz = new char [strlen(a + 1)]; strcpy(niz, a); }

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

crusher ::hmm, da nisi mozda mislio nesto ovako:...Blizu si. Very Happy Treba ovako:
class Tekst {     char* niz;     public:     Tekst(char* a)     {         niz = new char [strlen(a) + 1];         strcpy(niz, a);     } }

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

Ma dobro, nisam kucao u programu vec ovde u poruci kao obican tekst. Nego, sad cu da probam da zavrsim onaj program pa da vidimo da li cu uspeti.

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

Nema veze gde si kucao - to što si otkucao nije bilo ispravno. Wink

Ko je trenutno na forumu
 

Ukupno su 846 korisnika na forumu :: 35 registrovanih, 6 sakrivenih i 805 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amonsrb, Apok, Areal84, AS2, Boris90, comi991, darcaud, duskovuk63, goxin, ikan, ivance95, janezek67, Jethro, Kos93, Kule, lacko2, limeni2, mandicdamir245, Marko Marković, milekNS, ozzy, Regrut Boskica, S-lash, samsung2, tamburski, trajkoni018, trutcina, vathra, Vlada1389, White Knight, x92, Zerajic, zgoljo, Zmaj 99