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]