我正在使用 for do 回圈和 StringReplace...我看到了問題,但我不知道如何解決它。我想用保存在陣列中的字符替換整個字串,然后我想將 COMPLETE 替換的字串保存到 sLine 中。問題是,每次 loop(L) 重復代碼時,sLine 中之前的替換值都會被丟棄,以便它可以存盤新的半替換字串。(“半”,我的意思是它實際上一次只替換字串中的 1 個字符。)
有沒有辦法先替換整個字串,同時保留所有替換字符,然后將其保存在 sLine 中?
var
sEncryptInput, sLine : string;
K, L : integer;
begin
redOutEncrypt.Clear;
for K := 0 to redInEncrypt.Lines.Count do
begin
sEncryptInput := redInEncrypt.Lines[K];
for L := 0 to 25 do
begin
sLine := StringReplace(UpperCase(sEncryptInput), UpperCase(arrPlainAlph[L]), arrOffset[L], [rfReplaceAll, rfIgnoreCase]);
end;
redOutEncrypt.Lines.Add(sLine);
end;
end;
uj5u.com熱心網友回復:
問題在于回圈的每次迭代都將讀取sEncryptInput作為其源然后呼叫StringReplace. 由于sEncryptInput在每次迭代中都沒有更新,因此您sLine只包含在上次回圈迭代中所做的更改。
為了保持每次迭代中所做的所有更改,您的回圈需要讀取和寫入同一個變數。所以你的代碼應該是這樣的:
...
sEncryptInput := redInEncrypt.Lines[K];
//Copy unmodified sEncryptInput to sLine before doing any changes in your loop
sLine = sEncryptInput;
for L := 0 to 25 do
begin
//Pass sLine as input sring to StringReplace in order to retain
//changes made in previous loop cycles
sLine := StringReplace(UpperCase(sLine), UpperCase(arrPlainAlph[L]), arrOffset[L], [rfReplaceAll, rfIgnoreCase]);
end;
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315618.html
標籤:德尔福
上一篇:delphi例外后重試
