对优化以下delphi代码有任何建议吗?

时间:2019-04-23 19:54:00

标签: delphi

我编写了以下代码,向朋友演示了字符串操作。该功能按要求工作。我的问题是,代码是否可以优化(缩短)?

用法:

txtPassword.Text := toPassword(txtPassword.Text);

功能:

  1. 获取输入,将其更改为大写-apple-> APPLE
  2. 每个字母都被替换为前一个字母,除了A和Z-B变为A
  3. 在末尾添加单词的长度
  4. 反转原始大写单词并将其附加到末尾

    function TForm1.toPassword(input: string): string;
    var
      strMyABC, strWord, strAppend, strResult : string;
      I, intAns : Integer;
    begin
      strMyABC := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
      strWord := Uppercase(input);
    
      for I := 1 to strWord.Length do
      begin
        intAns := Pos(strWord[I], strMyABC);
        if (intAns = 1) or (intAns = 26) then
        begin
          strAppend := strWord[I];
        end
        else
        begin
          strAppend := strMyABC[intAns-1];
        end;
        strResult := strResult + strAppend;
      end;
    
      result := strResult + IntToStr(strWord.Length) + ReverseString(strWord);
    
    end;
    

1 个答案:

答案 0 :(得分:0)

我认为您可以摆脱字母字符串,因为它仅用于确定您的字符是A还是Z。以下函数对字母的作用相同,但对其他字符的影响略有不同。如果我从字符本身中减去1,则基本上读取了4字节字符串长度指示符中的2字节,并将其用作char值。我认为两者都是非法的。 ;)

function TForm1.toPassword(input: string): string;
var
  c: Char;
  strWord: string;
begin
  Result := '';
  strWord := Uppercase(input);
  for c in strWord do
    Result := Result + IfThen(CharInSet(c, ['A', 'Z']), c, Char(Ord(c)-1));
  Result := Result + strWord.Length.ToString + ReverseString(strWord);
end;