Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Tau
Зарегистрирован: 19.12.2001 Сообщения: 2 Откуда: Москва
|
Добавлено: Ср Дек 19 2001 05:35 Заголовок сообщения: Выравнивание строки по обоим краям |
|
|
Если у кого есть, нужен 'простой' алгоритм субжа, а то все, что ни придумаю - весит строк 50-60, а хочется чего-то легковесного и приятного. |
|
Вернуться к началу |
|
|
cj
Зарегистрирован: 01.11.2001 Сообщения: 22
|
Добавлено: Ср Дек 19 2001 16:00 Заголовок сообщения: Выравнивание строки по обоим краям |
|
|
а какой алгоритм получился? мне надо просто сделать аналогичную задачу!
я предлагаю сделать следующим образом:
в зависемости от ширены страницы, надо брать максимальное колличество слов(которое может в ней поместиться), а пустые места расширять пробелами!
вся проблема в простой реадизации первой задачи! получаеться очень сложная структура!
буду рад если вы пришлете мне на мыло свой вариант решения этой задачи!!! |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:22 Заголовок сообщения: Как тебе такая шняга для Бильдера ? (только не указывай в вызове RS :) |
|
|
AnsiString WidthString(AnsiString s,int LL,AnsiString RS="") { TStringList *S=new TStringList; int L=s.Length(); for(int i=1,j;i' ' i++; if (ij) if (unsigned(s[i-1])' ') S-Add(s.SubString(j,i-j)+" "); } for(int i=0;iCount;) { int L=0,j=i,N=0,L2=0; while(LCount) L+=(L2=S-Strings[i++].Length()),N++; if (LLL && N1) L-=L2,i--,N--; int DL=(N1)? (LL-L)/(N-1):0; if (DLStrings[j]+sp; str=str.Trim(); if (N0) { int DDL=LL-str.Length()-S-Strings[j].Length()+1; if (DDLStrings[j++]; } RS=RS.Trim()+"\r\n"+str; } delete S; return RS; } |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:24 Заголовок сообщения: Re: Как тебе такая шняга для Бильдера ? (только не указывай в вызове RS :) |
|
|
Класс! она съела все знаки больше и меньше и т.п. |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:26 Заголовок сообщения: Re: Как тебе такая шняга для Бильдера ? (только не указывай в вызове RS :) |
|
|
Да, стало абсолютно нечитаемо, если сильно надо, могу намылить |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:50 Заголовок сообщения: Должно проканать |
|
|
AnsiString WidthString(AnsiString s,int LL,AnsiString RS="") { TStringList *S = new TStringList; int L = s.Length(); for(int i = 1,j;i ' ' i++; if (i j) if (unsigned(s[i - 1]) ' ') S - Add(s.SubString(j,i-j)+" "); } for(int i = 0;i Count;) { int L = 0,j = i,N = 0,L2 = 0; while(L Count) L + = (L2 = S - Strings[i++].Length()),N++; if (L LL && N 1) L - = L2,i--,N--; int DL = (N 1)? (LL-L)/(N-1):0; if (DL Strings[j]+sp; str=str.Trim(); if (N 0) { int DDL = LL-str.Length() - S - Strings[j].Length()+1; if (DDL Strings[j++]; } RS = RS.Trim()+"\r\n" + str; } delete S; return RS; } |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:50 Заголовок сообщения: Должно проканать |
|
|
AnsiString WidthString(AnsiString s,int LL,AnsiString RS="") { TStringList *S = new TStringList; int L = s.Length(); for(int i = 1,j;i ' ' i++; if (i j) if (unsigned(s[i - 1]) ' ') S - Add(s.SubString(j,i-j)+" "); } for(int i = 0;i Count;) { int L = 0,j = i,N = 0,L2 = 0; while(L Count) L + = (L2 = S - Strings[i++].Length()),N++; if (L LL && N 1) L - = L2,i--,N--; int DL = (N 1)? (LL-L)/(N-1):0; if (DL Strings[j]+sp; str=str.Trim(); if (N 0) { int DDL = LL-str.Length() - S - Strings[j].Length()+1; if (DDL Strings[j++]; } RS = RS.Trim()+"\r\n" + str; } delete S; return RS; } |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:50 Заголовок сообщения: Re: Как тебе такая шняга для Бильдера ? (только не указывай в вызове RS :) |
|
|
AnsiString WidthString(AnsiString s,int LL,AnsiString RS="") { TStringList *S = new TStringList; int L = s.Length(); for(int i = 1,j;i ' ' i++; if (i j) if (unsigned(s[i - 1]) ' ') S - Add(s.SubString(j,i-j)+" "); } for(int i = 0;i Count;) { int L = 0,j = i,N = 0,L2 = 0; while(L Count) L + = (L2 = S - Strings[i++].Length()),N++; if (L LL && N 1) L - = L2,i--,N--; int DL = (N 1)? (LL-L)/(N-1):0; if (DL Strings[j]+sp; str=str.Trim(); if (N 0) { int DDL = LL-str.Length() - S - Strings[j].Length()+1; if (DDL Strings[j++]; } RS = RS.Trim()+"\r\n" + str; } delete S; return RS; } |
|
Вернуться к началу |
|
|
Mike
Зарегистрирован: 17.11.2001 Сообщения: 339 Откуда: ekb
|
Добавлено: Вс Дек 23 2001 22:51 Заголовок сообщения: Re: Должно проканать |
|
|
Умная, зараза |
|
Вернуться к началу |
|
|
Tau
Зарегистрирован: 19.12.2001 Сообщения: 2 Откуда: Москва
|
Добавлено: Чт Янв 10 2002 03:35 Заголовок сообщения: Да я полчаса в ванной посидел и придумал :)(-) |
|
|
. |
|
Вернуться к началу |
|
|
|