2017-03-23 3 views
0

StringReplaceを使用せずに文字列内の単語を置換しようとしています。マニュアル文字列の置換(フリーパスカル)

私は4つのテキストボックスを使用しています。

第一ボックスは、元のテキスト 第二ボックスで、検索ワード 第三ボックスが代わる言葉 4RD箱では、あなたが望むように。これは、何かを行う必要があり、結果のテキスト

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; 
+1

これまでに試したことをお見せください。 –

+1

更新**文字列置換関数でカウントしたくないようです –

+0

あなたは言う:* ... StringReplace *を使用しないで、あなたのコード**は** 'StringReplace()'を使用していますか?本当の問題は何ですか?あなたは 'StringReplace()'を避けたいのでしょうか?または置換の数を持たせたい、あるいはその両方をしたいですか? –

答えて

1

です:

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機能や今後の参考のためDeleteInsert手順をよく読んであれば、それは良いでしょう。

PS:このコードには不注意なトラップが含まれていることに注意してください。 Replace文字列にFind文字列が含まれている場合(例:Find = 'cat'、Replace = 'catflap')はどうなるかを考えてみましょう。あなたは問題がどのようになるのか、それを避ける方法を見ることができますか?

+0

あなたはもっと速かったです:)。宿題の場合に備えて、コードなしで回答を作成しようとしていましたが、コードを書くだけではるかに高速でした。乾杯! –

+0

これはあなたの答えですか? – MartynA