Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

zadatak sa AnsiStringovima

[es] :: C/C++ programiranje :: zadatak sa AnsiStringovima

[ Pregleda: 3134 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dart_vejder
crna gora

Član broj: 58049
Poruke: 17
*.crnagora.net.



Profil

icon zadatak sa AnsiStringovima04.09.2005. u 23:20 - pre 227 meseci
imam RichEdit1 i 2.
trebam uraditi da iz ta dva Ansi Stringa dobijem Ansi String a i b koji ce zapravo predstavljati ona dva ali bez znakova razmaka i uporediti jesu li isti

uradio sam kod ali nece da radi. zasto?

String a,b;
int k=1,f=1;

for(int i=1; i<=RichEdit1->Text.Length(); i++)
{
if(RichEdit1->Text!=' ')
{
a[k]=RichEdit1->Text;
k++;
}
}

for(int j=1; j<=RichEdit2->Text.Length(); j++)
{
if(RichEdit2->Text[j]!=' ')
{
b[f]=RichEdit2->Text[j];
f++;
}
}

if(a==b)
ShowMessage("isti su");
else
ShowMessage("nisu isti");






[Ovu poruku je menjao dart_vejder dana 05.09.2005. u 00:22 GMT+1]
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 07:09 - pre 227 meseci
Sada nemam puno vremena da gledam jer treba da vodim dete u vrtic ;) ali onako
odokativno vidim par gresaka:

Citat:

for(int i=1; i<=RichEdit1->Text.Length(); i++)


Mislim da treba:
Code:

for(int i=0; i<RichEdit1->Text.Length(); i++)


Takodje:

Citat:

a[k]=RichEdit1->Text;
k++;


Treba:
Code:

a = a + RichEdit1->Text[i];


E sad, ja bih ipak sve ovo radio malo drugacije, a ti probaj i ovako, pa kad budem
imao vremena poggledacemo...

P.S.
TRichEdit ima property Lines koji opet ima indeksni operator Strings[], cisto da
razmislis...

Evo kako (NETESTIRANO!!!) mozes da 'prodjes' kroz linije i sve karaktere
pojedinacne linije TRIchEdit-a.

Code:

for ( int i=0; i<RichEdit1->Lines->Count; i++ )
{
   for ( int j=1; j<=Lines->Strings[i].Length(); j++ )
      RichEdit1->Lines->Strings[j];
}



Bolje resenje bi ti bilo da napravis funkciju koja uzima po jedan element iz
jednog pa iz drugog RichEdit-a (a ako je ' ' onda ga preskoci), pa izadji ODMAH
iz funkcije i vrati FALSE ako pronadjes da se ne slaze...

A ne ovako da sve prvo stavis u AnsiString...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 08:51 - pre 227 meseci
kad vec programiras, podsisteme stavljaj u funkcije...

Probaj ovaj kod /NETESTIRANO!!!/ :

--- H ---
Code:

// ...
bool __fastcall IsRichEditEqualWithoutSpaces(TRichEdit*, TRichEdit*); 
// ...


--- CPP ---
// ...
#include <StrUtils.Hpp>
// ...
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   if ( IsRichEditEqualWithoutSpaces( RichEdit1, RichEdit2 ) )
      ShowMessage( "Isti su!" );
   else
      ShowMessage( "Nisu isti!" );

}

bool __fastcall TForm1::IsRichEditEqualWithoutSpaces(TRichEdit *R1, TRichEdit *R2)
{
   if ( R1->Lines->Count != R2->Lines->Count )
      return ( false );

   for ( int i=0; i<R1->Lines->Count; i++ )
   {
      AnsiString A1 = AnsiReplaceStr( R1->Lines->Strings[i], " ",  "" );
      AnsiString A2 = AnsiReplaceStr( R2->Lines->Strings[i], " ",  "" );

      if ( A1 != A2 )
         return ( false );
   }


   return ( true );
}
 
Odgovor na temu

dart_vejder
crna gora

Član broj: 58049
Poruke: 17
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 12:17 - pre 227 meseci
razmisljao sam i tako da uradim
ali tu se cini mi se moze javiti nekoliko problema:

sta ako je jedan String veci od Drugog, tj ima vise slova.
tu bi trebalo pogledati prvo koji je manji, pa za njegovu duzinu da "predjemo" preko veceg, pa kasnije provjeriti da li su sva slova u ostatku veceg jednaka razmaku...
pa i nije bas tako jednostavno i brzo uraditi funkciju koja ce uzeti jedan element prvog stringa, pa cekati da se naidje na element drugog koji nije razmak...normalno to se sve moze uraditi,ali sam razmisljao zar nije ovako lakse i brze, a uradice istu stvar

prostudiracu tvoje predloge pa cu uraditi kako mi bude lakse

kad provjerim javicu kako sam uradio (koju sam ideju prihvatio) tj. radi li

[Ovu poruku je menjao dart_vejder dana 05.09.2005. u 13:35 GMT+1]
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
 
Odgovor na temu

dart_vejder
crna gora

Član broj: 58049
Poruke: 17
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 12:52 - pre 227 meseci
evo, obecao sam javiti

uradio sam ovako

Code:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String a,b;
for(int i=1; i<=RichEdit1->Text.Length(); i++)
{
if(RichEdit1->Text[i]!=' ')
{
a = a + RichEdit1->Text[i];
}
}
for(int j=1; j<=RichEdit2->Text.Length(); j++)
{
if(RichEdit2->Text[j]!=' ')
{
b = b + RichEdit2->Text[j];
}
}
if(a==b)
ShowMessage("Isti su!");
else
ShowMessage("Nisu isti!");


i to radi, ali samo ako se iste rijeci nalaze u istim redovima (bez obzira na razmake) a ako se neka rijec lomi izmedju redova, ovo ne radi.

kako da napravim da mi ne vodi racuna ni o novim redovima
(gledao sam kako izgledaju Stringovi a i b i vidio da se prelazak izmedju redova teksta obiljezava sa neke dvije uspravne linije.kako to da maknem??)

kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 17:35 - pre 227 meseci
Jesi li pogledao resenje koje sam ti dao sa funkcijom:
IsRichEditEqualWithoutSpaces()

Ono ide red po red i uporedjuje...


One uspravne crte su \r\n ili samo \n, nisam siguran... Toga se mozes resiti
preko funkcije koju sam ti vec predstavio u primeru koji pomenuh: AnsiReplaceStr():

Code:

AnsiReplaceStr( R1->Lines->Strings[i], "\r",  "" );
AnsiReplaceStr( R1->Lines->Strings[i], "\n",  "" );


...slicno ti moze zatrebati i za:

Code:

AnsiReplaceStr( R1->Lines->Strings[i], "\t",  "" );


P.S. Jesi li siguran da indeksi za Text[] idu od JEDINICE a ne od NULE???
To jest, ti si stavio:
Code:

for(int i=1; i<=RichEdit1->Text.Length(); i++)

Mozda treba:
Code:

for(int i=0; i<RichEdit1->Text.Length(); i++)

???

[Ovu poruku je menjao X Files dana 05.09.2005. u 18:35 GMT+1]

[Ovu poruku je menjao X Files dana 05.09.2005. u 18:50 GMT+1]
 
Odgovor na temu

dart_vejder
crna gora

Član broj: 58049
Poruke: 17
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima05.09.2005. u 20:35 - pre 226 meseci
cini mi se da je sa

for(int i=0; i<RichEdit1->Text.Length(); i++)

uporno javljao gresku....

pa, evo...uzmi jedan String i stavi da ti na Label-u 1 ispise RichEdit1->Text[1], a na Label-u 2 RichEdit->Text[0], prvi ce ispisati prvo slovo, a drugi ce prijaviti gresku

(moguce(??) da sam pogrijesio, ali sam tako nesto jednom izveo, i cini mi se da je bas ovako bilo...)
ma nije to tesko ponovo provjeriti...

nisam provjerio onaj drugi nacin...
pa i to cu uraditi vjerovatno
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima06.09.2005. u 13:24 - pre 226 meseci
meni ovo nije radilo...
mislim da sam otkrio sta je...
evo ovako...

x files, kao prvo, cini mi se da si malo pogrijesio u onome kodu...

o funkciji AnsiReplaceStr pise da se stavlja tekst, i kazes koji string u tom tekstu da zamijenis sa kojim stringom, prema tome, ne bih rekao da je trebalo staviti

AnsiReplaceStr( R1->Lines->Strings[I], "\r", "" );
vec
AnsiReplaceStr( R1->Text, "\r", "" ); , znaci ne jedno slovo vec cirav tekst ??
pa prema tome ne bi trebala ni ona for petlja...
sama funkcija predje preko teksta....

e, onda...nije trebalo ni ono

if ( R1->Lines->Count != R2->Lines->Count )
return ( false );

jer npr.

elite sec u ri
ty

i

elitesecurity

su po ovome kodu jednaki tekstovi, a ti im onim kodom nisi dozvolio da budu....

prepravljen kod sada izgleda ovako:

bool __fastcall TForm1::IsRichEditEqualWithoutSpaces(TRichEdit *R1, TRichEdit *R2)
{
AnsiString A1,A2;
AnsiString B1,B2; //trenutno ne trazim optimizaciju vec samo da proradi, kasnije treba optimizovati...


A1 = AnsiReplaceStr( R1->Text, " " , "" );
A2 = AnsiReplaceStr( R2->Text, " " , "" );

B1 = AnsiReplaceStr( A1, "\r" , "" );
B2 = AnsiReplaceStr( A2, "\r" , "" );

A1 = AnsiReplaceStr( B1, "\n" , "" );
A2 = AnsiReplaceStr( B2, "\n" , "" );


if ( A1 != A2 )
return ( false );
else
return ( true );
}

sada ukucah par raznih mogucnosti i radilo je fino...
e sada...moguce da i ja nesto grijesim...???

dart_vejder, pokusaj, pa javi je li to to...

e, samo da i ja nesto pitam u vezi ovoga...
treba li , tj. da li je pozeljno, nakon sto je odradjena radnja koja je odradjena,da "otpustimo" memoriju zauzetu stringovima A1, A2, B1 i B2, jer... mozda bi program trebao jos nesto odraditi pa se ponovo vratiti na istu radnju za neke druge stringove, pa da bezveze ne "drzimo" memoriju (pod uslovom da nam ovi stringovi vise ne trebaju)???



[Ovu poruku je menjao fucking voodoo dana 06.09.2005. u 14:25 GMT+1]

[Ovu poruku je menjao fucking voodoo dana 06.09.2005. u 14:27 GMT+1]
there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: zadatak sa AnsiStringovima06.09.2005. u 17:12 - pre 226 meseci
Citat:

[...] ne bih rekao da je trebalo staviti

AnsiReplaceStr( R1->Lines->Strings[I], "\r", "" );
vec
AnsiReplaceStr( R1->Text, "\r", "" ); , znaci ne jedno slovo vec cirav tekst ??
pa prema tome ne bi trebala ni ona for petlja...
sama funkcija predje preko teksta....


Ne, nisam nigde pogresio... Zadatak NIJE BIO U POTPUNOSTI DEFINISAN, a ja
sam dao jedno orjentaciono resenjene na osnovu PRVOBITNOG teksta zadatka,
koje kasnije mozes da prilagodis svojim potrebama.

U prvobitnom tekstu zadatka NIGDE SE NISU POMINJALI redovi, vec samo blankovi!

Citat:

e, onda...nije trebalo ni ono
if ( R1->Lines->Count != R2->Lines->Count )
return ( false );
jer npr.
elite sec u ri
ty

i

elitesecurity

su po ovome kodu jednaki tekstovi, a ti im onim kodom nisi dozvolio da budu....


Naravno da im nisam dozvolio, jer niko nije pominjao redove, a to i nisu jednaki
tekstovi jer u prvom slucaju radi se o:

"elite sec u ri\r\nty"

a u drugom o:

"elitesecurity"

... sto NIJE ISTO! Tek kasnije, pojavila se 'potreba' za izbacivanje specijalnih
karaktera, sto svako na osnovu koda koji sam dao moze za sebe da prilagodi.

Citat:

e, samo da i ja nesto pitam u vezi ovoga...
treba li , tj. da li je pozeljno, nakon sto je odradjena radnja koja je odradjena,da "otpustimo" memoriju zauzetu stringovima A1, A2, B1 i B2, jer... mozda bi program trebao jos nesto odraditi pa se ponovo vratiti na istu radnju za neke druge stringove, pa da bezveze ne "drzimo" memoriju (pod uslovom da nam ovi stringovi vise ne trebaju)???


Naravno da NE TREBA! Objekti za koje je memorija zauzeta na steku AUTOMATSKI
se uklanjaju kada izadju iz oblasti vazenja (vidljivosti).


Dakle:

Code:

NEKI BLOK 
{
   TNekaKlasa OBJEKAT;

   // AUTOMATSKI SE POZIVA NJEGOV DESTRUKTOR I UKLANJA IZ MEMORIJE (STEKA)
}


Ali:

Code:

NEKI BLOK
{
   TNekaKlasa *OBJEKAT;
   OBJEKAT = new TNekaKlasa;
   // itd ...

   // MORAS OBJEKAT UKLONITI SA delete OBJEKAT;
}


Ovo je izuzetno vazan koncept za C++ jezik na kome se zasnima takozvani RAII
projektni sablon... ali otom potom...

 
Odgovor na temu

IDE

Član broj: 53403
Poruke: 586
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima06.09.2005. u 19:13 - pre 226 meseci
pa ok, mozda sam i ja pogrijesio sta se tu trazi...mozda je zapravo trebalo napraviti ono sto si ti pravio...uglavnom, sto god da je trebalo-ima i jedno i drugo sad rijesenje....



ok, znaci ne treba "rucno" oslobadjati memoriju...hvala, to mi je bilo malko diskutabilno...


there's something out there
waiting for us,
and it ain't no man...
 
Odgovor na temu

dart_vejder
crna gora

Član broj: 58049
Poruke: 17
*.crnagora.net.



Profil

icon Re: zadatak sa AnsiStringovima06.09.2005. u 19:50 - pre 226 meseci
super mi je dosao kod i od jednog i od drugog


zahvaljujem
kod žorža ti je ka' u banku!!
oko? sto ce ti oko??
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: zadatak sa AnsiStringovima07.09.2005. u 07:00 - pre 226 meseci
Pogledaj letimicno i ovaj thread (moze da te zanima):

http://tinyurl.com/9e573

... tu je covek trazio *najbrze* resenje za manipulaciju podacima koji se nalaze
u RichEdit-u. Moja malenkost mu je uradila kod koji se bazira na prethodnom
ucitavanju podataka u TMemoryStream, i on tvrdi da je procedura koju sam mu
uradio radila brze nego ista procedura na SQL serveru. Poredjenja radi, slicna
procedura je kada se radilo DIREKTNO sa '->Text[]'-om radila oko 40sec a moja
procedura 0.42sec!!!

Ovo ti sve govorim iz razloga sto ceo sadrzaj RichEdit text-a mozes ucitati u
TMemoryStream objekat (umesto u neki tvoj buffer) i tu radis sa njime, jer je
TMemroyStream mnogo fleksibilniji za rad...

 
Odgovor na temu

[es] :: C/C++ programiranje :: zadatak sa AnsiStringovima

[ Pregleda: 3134 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.