Kod mene sve radi. Verovatno si prevideo BLANKO i znak DVE TACKE, jer je inicijalno resenje
radjeno za slucaj kada se razdvajanje vrsi na poojavu znaka DVE TACKE. Evo ti kod:
--- H ---
Code:
void ParseAnsiStringToStrings( AnsiString AString, char AChar, TStrings *AStrings );
AnsiString StringsToAnsiString( TStrings *AStrings, char AChar );
--- CPP ---
Code:
void TForm1::ParseAnsiStringToStrings( AnsiString AString, char AChar, TStrings *AStrings )
{
if ( AString.Length() == 0 )
return;
AString = AString + AChar;
AStrings->Clear();
char *niz = new char[ AString.Length() + 1 ];
char *pom = new char[ AString.Length() + 1 ];
strcpy( niz, AString.c_str() );
int prev = 0;
for ( int i=0; i<AString.Length(); i++ )
{
if ( ( niz[i] == AChar ) || ( i == AString.Length()-1 ) )
{
strncpy( pom, &niz[prev], i-prev );
pom[i-prev] = '\0';
if ( AnsiString( pom ).Length() > 0 ) // <--- if NULL do nothing
AStrings->Add( AnsiString( pom ) );
prev = i + 1;
}
}
delete [] pom;
delete [] niz;
}
AnsiString TForm1::StringsToAnsiString( TStrings *AStrings, char AChar )
{
AnsiString Delimited;
for ( int i=0; i<AStrings->Count; i++ )
Delimited += AStrings->Strings[i] + AChar;
Delimited.SetLength( Delimited.Length()-1 );
return( Delimited );
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ParseAnsiStringToStrings( Edit1->Text, ' ', ListBox1->Items );
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit2->Text = StringsToAnsiString( ListBox1->Items, ' ' );
}
Dakle, stavi na formu:
Edit1 (neka ima vrednost: a b c d e)
Edit2
ListBox1
Button1
Button2
Kada pritisnes Button1, vrsi se provera onoga sto pise u Edit1 i rezultat se stavlja u ListBox1.
Pritisak na Button2 vrsi obrnut postupak i sadrzaj ListBox1 stavlja u Edit2.
Inace, resenje je poprilicno rogobatno, jer sam ga radio cisto da proradi. Imas postovana kraca
i elegantnija resenja.