Ładny brzuch
Witam .. zna ktos moze dobry sposob na dzielenie Stringow na tokeny np oddzielone znakiem ";" ? :) Bylbym wdzieczny za jakiekolwiek informacje :D
cytat:Fazer napisa:
Witam .. zna ktos moze dobry sposob na dzielenie Stringow na tokeny np oddzielone znakiem ";" ? :) Bylbym wdzieczny za jakiekolwiek informacje :D
nie bardzo sie na tym znam ale jezeli tokeny to inne stringi to moznaby tworzyc je dynamicznie i przepisywac znaki do z pierwotnego stringa do nich ( nie pisalem nigdy w builderze ale w visualu byloby to tak ):
// wymaga wlaczania strstream.h
char **Array;
Array = new char*[N]; // alokujemy dynamicznie tablice stringoow
// rozmiar N ??? --> przeliczyc trzeba by // liczbe znakoow ';' w stringu najpierw
ostrstream Stream; // tworzy strumien wewnetrzny (konstruktor // bez argumentoow, czyli mozesz wpisac // dowolna ilosc znakow - buffor bedzie sie // sam powiekszal
for( int i = 0, n = 0; String[i]; ) // petla do czasu az natrafi // na NULL
{
for( ; String[i] != ';'; ++i ) // szukamy ';'
Stream << String[i]; // wpisujemy znak do buffora // strumienia
Stream << ends; // zamyka strumien
Array[n] = Stream.str(); // zwraca wskaznik na buffor
}
nie wiem czy to bedzie dzialac ( nie mam teraz zadnego kompilatora akurat:( mam watpliwosci co do ponownego uzycia poozniej strumienia Stream po zamknieciu go, niemniej jednak moze cos ci sie uda z tego madrego wyciagnac;) polecam helpa, powodzenia
o O l_ahriman O o
aha jooz sobie przypomnialem to bylo chyba
String.clear() jak sie nie myle
pod koniec zewnetrznej petli .....hmmm
o O l_ahriman O o
TStringList* tokens(String zm, char token) { if(zm[zm.Length()]!=token) zm+=token; TStringList *list = new TStringList; for(int pos=1,i=1;i<=zm.Length();i++) if(zm[i]==token) { list->Add(zm.SubString(pos,i-pos)); pos=i+1; } return list; } void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Lines = tokens("elou;aloha;hello;elo;;x;wrrr",';'); }
pozdrawiam
pepsi^no1
Wielkie Dzieki :D
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
cytat:Fazer napisa:
Witam .. zna ktos moze dobry sposob na dzielenie Stringow na tokeny np oddzielone znakiem ";" ? :) Bylbym wdzieczny za jakiekolwiek informacje :D
nie bardzo sie na tym znam ale jezeli tokeny to inne stringi to moznaby tworzyc je dynamicznie i przepisywac znaki do z pierwotnego stringa do nich ( nie pisalem nigdy w builderze ale w visualu byloby to tak ):
// wymaga wlaczania strstream.h
char **Array;
Array = new char*[N]; // alokujemy dynamicznie tablice stringoow
// rozmiar N ??? --> przeliczyc trzeba by // liczbe znakoow ';' w stringu najpierw
ostrstream Stream; // tworzy strumien wewnetrzny (konstruktor // bez argumentoow, czyli mozesz wpisac // dowolna ilosc znakow - buffor bedzie sie // sam powiekszal
for( int i = 0, n = 0; String[i]; ) // petla do czasu az natrafi // na NULL
{
for( ; String[i] != ';'; ++i ) // szukamy ';'
Stream << String[i]; // wpisujemy znak do buffora // strumienia
Stream << ends; // zamyka strumien
Array[n] = Stream.str(); // zwraca wskaznik na buffor
}
nie wiem czy to bedzie dzialac ( nie mam teraz zadnego kompilatora akurat:( mam watpliwosci co do ponownego uzycia poozniej strumienia Stream po zamknieciu go, niemniej jednak moze cos ci sie uda z tego madrego wyciagnac;) polecam helpa, powodzenia
o O l_ahriman O o
aha jooz sobie przypomnialem to bylo chyba
String.clear() jak sie nie myle
pod koniec zewnetrznej petli .....hmmm
o O l_ahriman O o
TStringList* tokens(String zm, char token) { if(zm[zm.Length()]!=token) zm+=token; TStringList *list = new TStringList; for(int pos=1,i=1;i<=zm.Length();i++) if(zm[i]==token) { list->Add(zm.SubString(pos,i-pos)); pos=i+1; } return list; } void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Lines = tokens("elou;aloha;hello;elo;;x;wrrr",';'); }
pozdrawiam
pepsi^no1
Wielkie Dzieki :D