手动字符串替换(自由Pascal)

手动字符串替换(自由Pascal),pascal,Pascal,我试图在不使用StringReplace的情况下替换字符串中的一个单词,知道如何替换吗 我使用4个文本框 第一个框是原文 第二个框是搜索词 第三个框是替换词 第四个框是结果文本 var Form1: TForm1; result: string; rep: string; i, iCount: integer; procedure TForm1.Button1Click(Sender: TObject); begin Edit4.Text := StringRepla

我试图在不使用StringReplace的情况下替换字符串中的一个单词,知道如何替换吗

我使用4个文本框

第一个框是原文 第二个框是搜索词 第三个框是替换词 第四个框是结果文本

var
  Form1: TForm1;
  result: string;
  rep: string;
  i, iCount: integer;  


procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit4.Text := StringReplace(Edit1.Text, Edit2.Text, Edit3.Text, [rfReplaceAll, rfIgnoreCase]);
  begin
    result := Edit4.Text;
    rep := Edit3.Text;
    iCount := 0;

    for i := 1 to length(result) do
    begin
      if result[i] = rep then
        inc(iCount);
    end;
  end;
  label5.Caption := ('There was ' + IntToStr(iCount) + ' changes made');
end;  

这应该像您希望的那样:

program mystringreplacetest;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils;


function MyStringReplace(const Input, Find, Replace : String; out Count : Integer) : String;
var
  P : Integer;
begin
  Count := 0;

  Result := Input;

  repeat
    P := Pos(Find, Result);
    if P > 0 then begin
      Delete(Result, P, Length(Find));
      Insert(Replace, Result, P); 
      Inc(Count);
    end;
  until P = 0;
end;


var
  S : String;
  Count : Integer;
begin
  S := 'a cat another cat end';
  S := MyStringReplace(S, 'cat', 'hamster', Count);
  writeln(S, ' : ', Count);
  readln;
end.
如果这是家庭作业,我给你留了几件事要做:

  • 不区分大小写

  • 避免重复扫描字符直到第一次出现
    Find

显然,如果您仔细阅读
Pos
功能和
Delete
Insert
程序,以备将来参考,那就太好了


PS:请注意,此代码包含一个陷阱,用于不小心的人。考虑当<代码>替换< /COD>字符串包含“代码>查找< /代码>一个时发生的情况(例如,查找=‘CAT’和‘替换’=CATFLAP’)。你能看到问题是什么,以及如何避免它吗?

请向我们展示你迄今为止所做的尝试。更新**它似乎不想使用字符串替换函数计算你说:…不使用StringReplace,但你的代码使用的是
StringReplace()
?真正的问题是什么?您想避免使用
StringReplace()
,还是想获得替换计数,或者两者都要?我无法让它与StringReplace一起使用,因此正在考虑另一种方法。是的,我确实想让它计算替换数,但无法让它工作。好的,我会准备一个答案,但记住以后不要问如何解决x,因为y是你的实际问题。你更快:)。我试图在没有代码的情况下制定一个答案,以防这是家庭作业,但如果只编写代码,速度会快得多。干杯这回答了你的问题吗?