Советы по Delphi

       

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


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

function Proper (source, separators : STRING) : STRING;
var
LastWasSeparator : BOOLEAN;ndx : INTEGER;begin
LastWasSeparator := TRUE;ndx := 1;while (ndx<=Length(source)) do beginif LastWasSeparatorthen 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 BeginIf (Result[I] = ' ') Or (Result[I] = '''') Or (Result[I] = '"')Or (Result[I] = '-') Or (Result[I] = '.') Or (Result[I] = '(') ThenResult[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
beginif
newWord and (s[i] in ['a'..'z']) thenbegin s[i]:=t[i]; newWord:=false; continue; end;if s[i] in ['a'..'z',''''] then continue;newWord:=true;end;result:=s;
end;

[000253]



Содержание раздела