![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый вечер всем. У меня такой вопрос. В ComboBox грузится список людей, мне требуется из полной ФИО (Иванов Иван Иваныч) получить в Edit Иванов И.И.. Подскажите как лучше организовать такое.
Код:
procedure TForm1.FIO; var s : String; i : integer; begin s := ComboBox2.Text; Edit1.Text := '???'; end; |
#2
|
||||
|
||||
![]() Хорошая заготовка кода.
В общем нужно бежать по строке (со n-го символа (n>1)) и копировать заглавные буквы. Код:
if str[i] in ['А'..'Я'] then... — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 08.10.2013 в 19:23. |
#3
|
||||
|
||||
![]() Выбирайте
Код:
function hfs(ds: string): string; var i: integer; s: string; flg: boolean; begin s:= ''; flg:= false; for i := 1 to Length(ds) do begin s:= s + ds[i]; if ds[i] = ' ' then begin if flg then Result:= Result+ s[1] + '.' else Result:= s; s:= ''; flg:= true; end; if (flg) and (i = Length(ds)) then Result:= Result + s[1] + '.'; end; end; Код:
function hfs(ds: string): string; var i: integer; begin i:= Pos(' ', ds); if i > 0 then begin Result:= Copy(ds, 1, i); i:= PosEx(' ', ds, i); Result:= Result + Copy(ds, i+1, 1) + '.'; i:= PosEx(' ', ds, i); Result:= Result + Copy(ds, i+1, 1) + '.'; end else Result:= ds; end; Код:
function hfs(ds: string): string; var sl: TStrings; begin sl:= TStringList.Create; sl.Delimiter:= ' '; sl.DelimitedText:= ds; if sl.Count > 0 then Result:= sl.Strings[0] + ' ' + sl.Strings[1][1] + '.' + sl.Strings[2][1] + '.' else Result:= ds; sl.Free; end; Добавлено значительно позже Цитата:
Код:
function hfs(ds: string): string; var i: integer; flg: boolean; begin flg:= true; for i := 1 to Length(ds) do begin if ds[i] = ' ' then begin if flg then Result:= Result + ' '; flg:= false; end; if flg then Result:= Result + ds[i]; if (not flg) and (ds[i] in ['А'..'Я']) then Result:= Result + ds[i] + '.'; end; end; 4250 Помогаю платно. Помогаю иногда бесплатно. Последний раз редактировалось @Rafa3L, 09.10.2013 в 09:38. |
Этот пользователь сказал Спасибо @Rafa3L за это полезное сообщение: | ||
fofka (09.10.2013)
|
#4
|
||||
|
||||
![]() Может кому и пригодится. Как говорится, пусть будет.
Код:
function f(a:string):string; var b:string; begin b:=copy(a,1,pos(' ',a)); delete(a,1,pos(' ',a)); b:=b+a[1]+'.'; delete(a,1,pos(' ',a)); f:=b+a[1]+'.'; end; procedure TForm1.FIO; begin Edit1.Text := f(ComboBox2.Text); end; Спасибо всем за помощь. |
#5
|
||||
|
||||
![]() Ща я вам праздник испорчу.
![]() Ни один из приведенных примеров не даст ожидаемый результат на таком варианте: иВанов максим петрович Ибо нет обработки строчных, прописных букв согласно исходной постановки задачи. И это я еще про юникод молчу. ![]() Стыдно товарищи! Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
![]() Оффтоп:
Да чтож тебя, УК Страдалецъ, всё время на ИИ-то тянет, ну прям мозги должны быть в любой ерунде, и всё тут! ![]() В задании есть Цитата:
На выходе всех функций, по списку: Цитата:
Во второй hfs незначительная ошибка: нужно при первом поиске пробела увеличить i на еденицу Код:
... i:= PosEx(' ', ds, i) + 1; ... Код:
function f(a: string): string; begin Result:= Copy(a, 1, Pos(' ', a)); Delete(a, 1, Pos(' ', a)); Result:= Result + a[1] + '.'; Delete(a, 1, pos(' ', a)); Result:= Result + a[1] + '.'; end; З.Ы. Кстати, можно ещё в Edit`е свойство CharCase в ecLowerCase установить, и тогда совсем весело будет. Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
fofka (12.10.2013)
|
#7
|
||||
|
||||
![]() Alegum, исправил как Вы предложили сократил код.
Код:
function f(a: string): string; begin Result:= Copy(a, 1, Pos(' ', a)); Delete(a, 1, Pos(' ', a)); Result:= Result + a[1] + '.'; Delete(a, 1, pos(' ', a)); Result:= Result + a[1] + '.'; Спасибо за помощь в вопросе. |