Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.06.2010, 19:52
becks becks вне форума
Прохожий
 
Регистрация: 17.06.2010
Сообщения: 1
Репутация: 10
По умолчанию Форматирование текста

Нужно сваять вот такое...((

Форматирование текста. Дан текст, состоящий из предложений, разделяемых точками. Напишите программу, производящую следующее форматирование: после каждой точки в конце предложения должен стоять хотя бы один пробел; первое слово в предложении должно начинаться с прописной буквы. Замечание. Текст может быть как на русском, так и на английском языке.
Ответить с цитированием
  #2  
Старый 17.06.2010, 21:21
XTen XTen вне форума
Прохожий
 
Регистрация: 05.06.2009
Сообщения: 38
Репутация: 10
По умолчанию

ICQ: 410691984
Ответить с цитированием
  #3  
Старый 17.06.2010, 23:21
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Фигня!
Режем текст по точкам на подстроки. Далее первую букву каждой строки делвем большой (AnsiUpperCase поможет). и в конце склеиваем их через пробел. Нужны функции Pos, Copy, AnsiUpperCase, цикл и немного головы
Ответить с цитированием
  #4  
Старый 18.06.2010, 09:08
Rjkzy Rjkzy вне форума
Прохожий
 
Регистрация: 15.06.2010
Адрес: дома
Сообщения: 34
Репутация: 10
По умолчанию

конечно можно оптимизировать, но нужно ли?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
CurPos, LastPos:Cardinal;
Findstr, VrStr:String;
begin
CurPos:=0;
LastPos:=0;
VrStr:=Memo1.Text;
repeat
  Findstr:=RightStr(VrStr,length(VrStr)-LastPos+1);
  CurPos:=pos('.',Findstr);
  LastPos:=LastPos+CurPos;
  if Findstr[CurPos+1]<>' ' then
    begin
    if LastPos=CurPos then
      begin
      Insert(' ',VrStr,LastPos+1);
      end
    else
      Insert(' ',VrStr,LastPos);
    end;

   if LastPos=CurPos then
      begin
      if (ord(VrStr[LastPos+2]) in [224..255]) or (ord(VrStr[LastPos+2]) in [97..122]) then
        begin
        VrStr[LastPos+2]:=chr(Ord(VrStr[LastPos+2])-32);
        end;
      if (ord(VrStr[LastPos+2])=184) then VrStr[LastPos+2]:=chr(Ord(VrStr[LastPos+2])-16);
      end
    else
      begin
      if (ord(VrStr[LastPos+1]) in [224..255]) or (ord(VrStr[LastPos+1]) in [97..122]) then
        begin
        VrStr[LastPos+1]:=chr(Ord(VrStr[LastPos+1])-32);
        end;
      if (ord(VrStr[LastPos+1])=184) then VrStr[LastPos+1]:=chr(Ord(VrStr[LastPos+1])-16);
    end;
until CurPos=0;
Memo1.Text:=VrStr;

end; 

Последний раз редактировалось Rjkzy, 18.06.2010 в 09:13.
Ответить с цитированием
  #5  
Старый 18.06.2010, 09:10
Rjkzy Rjkzy вне форума
Прохожий
 
Регистрация: 15.06.2010
Адрес: дома
Сообщения: 34
Репутация: 10
Плохо

Цитата:
Сообщение от lmikle
Фигня!
Режем текст по точкам на подстроки. Далее первую букву каждой строки делвем большой (AnsiUpperCase поможет). и в конце склеиваем их через пробел. Нужны функции Pos, Copy, AnsiUpperCase, цикл и немного головы
AnsiUpperCase такая злобная функция, что далеко не у всех и не всегда работает. у меня на одном компе пашет, на втором даже с латинницей ну ни в какую! Да и при таком подходе по-любому больше одного пробела получится после точек, а к этому придеруться.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:06.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025