[ mjux @ 31.10.2007. 19:38 ] @
zanima me da li je na neki nacin moguce postaviti dodelu izmedju dva AnsiString-a tipa s [ i ]=s1 [ j ]... pokusavao sam na vise nacina bez koriscenja funkcija predefinisanih u bcb ali mi uvek izbacuje neku extra gresku ...
akoneko ima neku ideju molim da je posalje...:)
ako moze bez nekih predefinisanih funkcija jer mi treba cist kod....:P
[ X Files @ 31.10.2007. 20:17 ] @
Naravno, AnsiString-ovi su jako laki za upotrebu. Samo moraš biti konkretan i reći šta ti treba. Najbolje daj minimalan kod.

Šta je s[ i ] = s1[ j ] ? Jesu li to dva niza AnsiString-ova ili pojedinačni elementi (karakter) jednog AnsiString-a ?
[ mjux @ 31.10.2007. 20:27 ] @
ok konkretno:

imam dva stringa
s: petar je covek //:)
s1: 10#bio

treba mi da iz stringa s1 izvucem broj koji se nalazi ispred karaktera '#'
taj broj koji izvucemo i pretvorimo u int nam je redni broj pozicije od koje pocinjemo da umecemo
ostatak stringa s1(posle znaka '#'(ali bez njega)) u string s!!!

probao sam tako sto sam pokusao da u neki pomocni string pom izvucem taj broj

int i=1;

while(s [ i ]!='#')
{
pom [ i ]=s [ i ]; /// ali kad dodje do ovog dela program se zapuca.....
}

necu da koristim funkcije posto sam sa njima vec odradio ali ovo mi vec ide na zivce
zanima me da li je dodela ovog tipa uopste moguca u c++-u
[ X Files @ 31.10.2007. 20:55 ] @
Code:

AnsiString S = "Petar je covek";
AnsiString S1= "10#bio";
// ...
int pozicija = S1.Pos( "#" );
// ...
AnsiString Broj = S1.SubString( 1, pozicija - 1 ); // 10
AnsiString Ostatak = S1.SubString( pozicija + 1, S1.Length()-pozicija ); // bio
// ...

U BCB6 postoje (StrUtils.hpp) MidStr(), LeftStr(), RightStr(), sa kojima bi eventualno bilo manje koda.

Šta znači umetanje Ostatka u S ?
Code:

S = S + Ostatak; // <--- Dodvanje na kraj
S = Ostatak + S; // <--- Dodvanje na pocetak
S.Insert( Ostatak, 6 ); //<--- Umetanje od 6te pozicije ( ili  S = S.Insert( Ostatak, 6 ), ne mogu da se setim)


Citat:

necu da koristim funkcije posto sam sa njima vec odradio ali ovo mi vec ide na zivce. zanima me da li je dodela ovog tipa uopste moguca u c++-u

Objasni. Ako nećeš da koristiš AnsiString i njegove metode i funkcije, onda sve pretvori prvo u normalan char* pa radi po sirovom C/C++.

Citat:

int i=1;

while(s [ i ]!='#')
{
pom [ i ]=s [ i ]; /// ali kad dodje do ovog dela program se zapuca.....
}

Ovaj kod svakako se zakucava jer nemas uvecanje brojaca. Ipak, ovakve stvari nemoj da radis u VCL.

[ mjux @ 31.10.2007. 20:59 ] @
sustina svega je da se proveri da li se sa ANSI stringom moze raditi na basic osnovu kao i sa char*
da li moze da se prolazi sa indexima, da se sazima, rotira, i sve sto se moze raditi sa indexnim adresiranjem u c-u
[ X Files @ 31.10.2007. 21:03 ] @
Uglavnom ne.
AnsiString je (složen tip) KLASA koja nije NULL terminated. Interno se implementiraju sve realokacije, privremeni objekti i sl. Čak i ako nešto proradi u trenutku, ne mora da znači da je to pravi način.

Za klasično adresno indeksiranje i operacije nad NULL terminated stringom prvo pretvori AnsiString objekat u char*.
[ mjux @ 31.10.2007. 21:05 ] @
ok hvala
sad znam da vise ne moram da se mucim sa ovim
[ mjux @ 31.10.2007. 21:14 ] @
e da jos jedna stvar
int i=1;

while(s [ i ]!='#')
{
pom [ i ]=s [ i ]; /// ali kad dodje do ovog dela program se zapuca.....
i++;///// sad ima i brojac ali ipak
}



pom [ i ]=s [ i ];//zanima me ovo... da li postoji ikakva mogucnost da ja pristupim podpolju ili cemu vec objekta i izmenim sta je upisamo na njemu ili ne
[ X Files @ 31.10.2007. 21:38 ] @
Citat:
mjux: e da jos jedna stvar
int i=1;

while(s [ i ]!='#')
{
pom [ i ]=s [ i ]; /// ali kad dodje do ovog dela program se zapuca.....
i++;///// sad ima i brojac ali ipak
}
pom [ i ]=s [ i ];//zanima me ovo... da li postoji ikakva mogucnost da ja pristupim podpolju ili cemu vec objekta i izmenim sta je upisamo na njemu ili ne


Ne znam šta podrazumevaš pod podpolje/objekat, i šta bi konkretno menjao? Još jednom kažem, AnsiString ima sve što je potrebno za ugodan rad sa stringovima, i retko kad je potrebna neka konverzija u char*.
Ovime:
pom [ i ]=s [ i ]
... dodeljujes karakter s[ i ] u karakter pom[ i ]. To je legalno, dok god ne izađeš izvan limita.