2016-11-18 12 views
-3

こんにちは皆さんは最初の文字 ':'が会うまで文字列を停止してコピーしたいと思います。 は、以下の文字列「404:不正な要求」している私と私の出力が「404」:Delphi10。この文字までのキャラクタをコピーする機能 ':'

function CutOff(const s: string; n: integer):string; 
var 
    i, k: integer; 

begin 
    k := 0; 
    for i := 1 to n do 
    begin 
    k := Pos(s, ':', k+1); 
    if k = 1 then Exit; 
    end; 
    Result := Copy(s, 1, k); 
end; 
+0

'n個の目的は何である:integer'パラメータ?あなたはそれについて何も言わなかった。 –

+0

Pos()を使っているのであれば、なぜforループがchar-by-charという文字列を踏んでいるのでしょうか?あなたが文字列処理を理解しているなら、私には無意味です。 – MartynA

+0

'TStrings'クラスの中で' ExtractName'メソッドの実装を見てみましょう:http://docwiki.embarcadero.com/Libraries/Berlin/en/System.Classes.TStrings.ExtractName区切り文字の前にその部分を返します。同様の関数が 'JCL' - メソッド' TJclWideStrings.ExtractName'でも使われています:https://github.com/magicmonty/delphi-code-coverage/blob/master/3rdParty/JCL/jcl-2.3.1.4197/source/ common/JclWideStrings.pas。しかし、どちらも 'n'パラメータを持っていません。 – quasoft

答えて

2

あなたの関数が返すように意図されたことが表示されますが、私はちょうどしたい「404'.Hereは私のコードです文字列 'nthコロン、あなたの説明で言うことに反して:...までの最初の文字': 'が満たされるまで。

あなたのコードの問題は、Pos()の引数に間違った方法があることです。それを修正した後、コロンを省略するあなたは、単にコピーする長さから1を引くことができます。

function CutOff(const s: string; n: integer): string; 
var 
    i, k: integer; 
begin 
    k := 0; 
    for i := 1 to n do 
    begin 
    k := Pos(':', s, k+1); 
    if k = 1 then Exit; 
    end; 
    Result := Copy(s, 1, k-1); // note here k-1 
end; 

をそして、あなたは

Errorcode := CutOff('404:Bad request', 1); 

代わりにそれを呼び出す最初コロンまでの文字列を検索し、あなたはn番目のコロンたくない場合は、最初

function CutOff(const s: string): string; 
var 
    k: integer; 
begin 
    k := Pos(':', s); 
    Result := Copy(s, 1, k-1); 
end; 
+0

ありがとう!!できます。 –

関連する問題