|
|
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; | |