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]