Идёт загрузка страницы...

htp://aptem.net.ru





Как сделать, чтобы первая буква каждого слова в строке была в верхнем регистре?


    function LowCase(ch : CHAR) : CHAR;
begin
case ch of
'A'..'Z' : LowCase := CHR (ORD(ch)+31);
else
LowCase := ch;
end;
end;

function Proper (source, separators : STRING) : STRING;
var
LastWasSeparator : BOOLEAN;
ndx              : INTEGER;
begin
LastWasSeparator := TRUE;
ndx := 1;
while (ndx<=Length(source)) do begin
if LastWasSeparator
then source[ndx] := UpCase(source[ndx])
else source[ndx] := LowCase(source[ndx]);
LastWasSeparator := Pos(source[ndx], separators)>0;
inc(ndx);
end;
Result := source;
end;

Можно так:


    Function  TfrmLoadProtocolTable.ToMixCase(InString: String): String;
Var I: Integer;
Begin
Result := LowerCase(InString);
Result[1] := UpCase(Result[1]);
For I := 1 To Length(InString) - 1 Do Begin
If (Result[I] = ' ') Or (Result[I] = '''') Or (Result[I] = '"')
Or (Result[I] = '-') Or (Result[I] = '.')  Or (Result[I] = '(') Then
Result[I + 1] := UpCase(Result[I + 1]);
End;
End;

Примечание:

Приведенные выше функции вызовут нарушение прав доступа, в случае, если в качестве входного параметра им послать пустую строку (первая функция) или последний символ имеется в проверяемом наборе (вторая функция).

Попробуйте взамен это:


    function proper(s:string):string;
var t:string;
i:integer;
newWord:boolean;
begin
if
s='' then exit;
s:=lowercase(s);
t:=uppercase(s);
newWord:=true;
for i:=1 to length(s) do
begin
if newWord and (s[i] in ['a'..'z']) then
begin s[i]:=t[i]; newWord:=false; continue; end;
if s[i] in ['a'..'z',''''] then continue;
newWord:=true;
end;
result:=s;
end;

[000253]