Mansur |
Отправлено: 30.11.2003, 09:11 |
|
Не зарегистрирован
|
Как можно эффективно разделить объект AnsiString (в частности предложение) на отдельные его составляющие (слова) используя какого либо разделителя. В частности символа пропуска?
Или с друг словами: Есть ли аналогичные классы в C++ Builder соответсвующие к классам JAVA StringTokenizer и методы похожие nextToken()? |
|
** pasha |
Отправлено: 30.11.2003, 23:34 |
|
Не зарегистрирован
|
Есть такая функция в Biulder-e !
А можно и руками написать.
|
|
exp |
Отправлено: 30.11.2003, 23:41 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Люди, вы что, писать разучились. Нет метода — сам напишем что-нибудь вроде этого.
CODE |
AnsiString Predlozhenie;
// трали-мули
AnsiString Slovo;
int i=0;
int nachalo_slova,konec_slova;
while(i<Predlozhenie.Length())
{
if(Predlozhenie[i]==' ')
{
nachalo_slova=i+1;
konec_slova=nachalo_slova;
while(konec_slova<Predlozhenie.Length())&&(Predlozhenie[konec_slova]!=' ') konec_slova++;
//между nachalo_slova и konec_slova — твое слово.Делай с ним,
// что хочешь: копируй, стирай, проверяй на матерность ...
i=--konec_slova;
}
i++;
}
|
Код написан на месте, поэтому работоспособность не гарантируется. По идее, должно работать. Не будет работать — ошибки посмотри, но вроде ничего серьезного не должно быть.
Ух ты, долго же я разглагольствовал.... . **pasha меня уже опередил.
Отредактировано exp — 01/12/2003, 00:45
|
|
** pasha |
Отправлено: 30.11.2003, 23:52 |
|
Не зарегистрирован
|
Да есть такой метод ! , завтра утром доберусь до работы — выложу
и метод и руками разделение, использовал и то и другое.
(Метод позволяет использовать разделители — пробел,
запятую и т,д, также написал свой простой метод -
утро вечера мудренее.
Отредактировано Admin — 02/12/2003, 00:14 |
|
pasha |
Отправлено: 01.12.2003, 10:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 62
|
Вот, нашел. Можно задать
несколько разделителей в этой функции.
Функция ExtractStrings().
CODE |
TSysCharSet Tws,Tcs;
Tcs<<' '<<'+'; // разделители
AnsiString s = "xcgxc fgfrgdf fdg+gfdg tyhrthh+g fggg+gf vghgh";
ExtractStrings(Tcs,Tws,s.c_str(),ListBox1->Items);
|
Получаем в ListBox1 строки
xcgxc
fgfrgdf
fdg
gfdg
tyhrthh
g
fggg
gf
vghgh
--
Или написать/использовать свою, типа:
CODE |
//---------------------------------------------------------------------------
int regfind(AnsiString s,AnsiString sim)
{
for(int j=1; j<s.Length(); j++){
for(int i=1; i<=sim.Length(); i++){
if(sim[i]==s[j]) return(s.Pos(sim[i]));
}}
return 0;
}
void regexp(AnsiString s, TStrings* sl, AnsiString sim)
{
int id = 1;
while(int n = regfind(s,sim)){
sl->Add(s.SubString(id,n-1));
s = s.SubString(n+1,s.Length()-1);
}
if(s.Length()) sl->Add(s);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
regexp(Edit1->Text, ListBox1->Items, ";*+- ");
}
//------------------------
|
Отредактировано Admin — 02/12/2003, 00:15 |
|
|