![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
заглавная буква после точки. [D7, WinXP]
Max4 © (2005-07-22 12:42:00)Есть задача - сабж.
Получается только для первой встретившийся точки в тексте - после неё заглавная становится. Остальные игнорируются.
Не могу правильно организовать рекурсию.
Код далее.
procedure TForm1.SetUpper(var value: String);
var
s1: String;
function SetUpperCaseAfter(value: String): String;
var
j: Integer;
s: String;
begin
for j := 1 to Length(value) - 1 do
if value[j] <> ' ' then
begin
s := value[j];
s := AnsiUpperCase(s);
value[j] := s[1];
Break;
end;
Result := value;
end;
begin
if Pos('.', value) = 0 then
Exit;
s1 := copy(value, Pos('.', value) + 1, Length(value) - Pos('.', value));
s1 := SetUpperCaseAfter(s1);
value := copy(value, 0, Pos('.', value)) + s1;
SetUpper(s1);
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
s: String;
i: Integer;
begin
i := Edit1.SelStart;
s := Edit1.Text;
SetUpper(s);
Edit1.Text := s;
Edit1.SelStart := i;
end;
Max4 (2005-07-22 13:11:00) [1]imho в [3] необходимо всё таки флаг выставлять в true только в случае если текущий символ '.',а не при каждом проходе. Т.к. если после точки будет пробел например, то логика будет нарушена.
ЗЫ хотя это и так ясно.
спасибо за подсказки
TUser (2005-07-22 13:02:00) [2][4] есть еще переводы строки и прочая муть. Поэтому [3] универсальнее, имхо.
Max4 (2005-07-22 12:59:00) [3]Вот,что получилось
procedure TForm1.SetUpper2(var value: String);
var
s1: String;
i: Integer;
flag: Boolean;
begin
flag := False;
for i := 0 to Length(value) - 1 do
begin
if flag and (value[i] <> ' ') then
begin
s1 := AnsiUpperCase(value[i]);
value[i] := s1[1];
flag := False;
end;
if value[i] = '.' then
flag := True;
end;
end;
Antonn (2005-07-22 12:52:00) [4]потому что Pos
TUser (2005-07-22 12:52:00) [5]procedure SetUpper(var S: string);
var i: integer;
f: boolean;
c: char;
begin
f:=true;
for i:=1 to length(S) do begin
if f then begin
c:=upcase(S[i]); // ansi ??
if c <> S[i] then begin
f:=false;
S[i]:=c;
end;
end;
f:=S[i]='.';
end;
end;
Alx2 (2005-07-22 12:51:00) [6]Сложности какие...
Встретилась точка и несущественный мусор после - устанавливаем флаг.
Встретилась буква и флаг установлен - меняем букву на загланвую.
Сбрасываем флаг.