掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列操作について (ID:18188)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
面白いのでやってみました。ポインタをつかって検索にはコピーを使わないようにして なるべく処理速度を上げています。 // 文字列の途中からでも検索できる:戻り値はポインタ function AnsiStrPosEx(Str,SubStr:PChar; InitPos:Cardinal):PChar; begin result := nil; if InitPos > StrLen(Str) then exit; result := AnsiStrPos(Str+InitPos,SubStr); end; // 文字列の途中からでも検索できる:戻り値は文字インデックス function AnsiPosEx(const Substr,S:string; InitPos:Cardinal):integer; var ret:PChar; begin ret := AnsiStrPosEx(PChar(S),PChar(Substr),InitPos-1); if ret = nil then result := 0 else result := ret-PChar(S)+1; end; // 一番最後の部分文字列の位置を返す function GetLastSubstrPos(const Substr,S:string):integer; var l,p,pre:integer; begin result := 0; l := Length(SubStr); p := AnsiPosEx(Substr,S,1); while (P<>0) do begin result := p; p := AnsiPosEx(Substr,S,p+l); end; end; // 一番最後の部分文字列より右側の文字列を返す function strRightBack(const str, substr: string): string; var p: integer; begin result := ''; p := GetLastSubstrPos(substr, str); if p > 0 then result := Copy(str,p+Length(substr),Length(str)); end; // 最初の部分文字列より左側の文字列を返す function strLeft(const str, substr: string): string; var p: integer; begin result := ''; p := AnsiPos(substr, str); if p > 0 then result := Copy(str, 1, p-1); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.