Poslao: 26 Jan 2015 17:00
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
Poslao: 26 Jan 2015 17:17
|
online
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14809
- 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.
|
|
|
|
Poslao: 26 Jan 2015 17:23
|
offline
- crusher
- Ugledni građanin
- 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?
|
|
|
|
Poslao: 26 Jan 2015 17:27
|
online
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14809
- Gde živiš: Niš
|
crusher ::Kako bih onda mogao da sa tim stringom da rukujem u ovoj funkciji at sto je vec napisana?Potpuno isto. 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.
|
|
|
|
Poslao: 26 Jan 2015 17:31
|
offline
- crusher
- Ugledni građanin
- 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?
|
|
|
|
|
Poslao: 26 Jan 2015 17:59
|
offline
- crusher
- Ugledni građanin
- 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);
}
|
|
|
|
Poslao: 26 Jan 2015 18:41
|
online
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14809
- Gde živiš: Niš
|
crusher ::hmm, da nisi mozda mislio nesto ovako:...Blizu si. Treba ovako:
class Tekst
{
char* niz;
public:
Tekst(char* a)
{
niz = new char [strlen(a) + 1];
strcpy(niz, a);
}
}
|
|
|
|
Poslao: 26 Jan 2015 18:47
|
offline
- crusher
- Ugledni građanin
- 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.
|
|
|
|
Poslao: 26 Jan 2015 18:55
|
online
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14809
- Gde živiš: Niš
|
Nema veze gde si kucao - to što si otkucao nije bilo ispravno.
|
|
|
|