我编写了以下代码,向朋友演示了字符串操作。该功能按要求工作。我的问题是,代码是否可以优化(缩短)?
txtPassword.Text := toPassword(txtPassword.Text);
反转原始大写单词并将其附加到末尾
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;
答案 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;