Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Вниззаглавная буква после точки. Найти похожие ветки
← →
Max4 (2005-07-22 12:42) [0]Есть задача - сабж.
Получается только для первой встретившийся точки в тексте - после неё заглавная становится. Остальные игнорируются.
Не могу правильно организовать рекурсию.
Код далее.
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;
← →
Alx2 © (2005-07-22 12:51) [1]Сложности какие...
Встретилась точка и несущественный мусор после - устанавливаем флаг.
Встретилась буква и флаг установлен - меняем букву на загланвую.
Сбрасываем флаг.
← →
Antonn © (2005-07-22 12:52) [2]потому что Pos
← →
TUser © (2005-07-22 12:52) [3]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;
← →
Max4 (2005-07-22 12:59) [4]Вот,что получилось
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;
← →
TUser © (2005-07-22 13:02) [5][4] есть еще переводы строки и прочая муть. Поэтому [3] универсальнее, имхо.
← →
Max4 (2005-07-22 13:11) [6]imho в [3] необходимо всё таки флаг выставлять в true только в случае если текущий символ ".",а не при каждом проходе. Т.к. если после точки будет пробел например, то логика будет нарушена.
ЗЫ хотя это и так ясно.
спасибо за подсказки
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c