Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 查找字符串中最后出现的字符_String_Delphi_Delphi 2007 - Fatal编程技术网

String 查找字符串中最后出现的字符

String 查找字符串中最后出现的字符,string,delphi,delphi-2007,String,Delphi,Delphi 2007,是否存在任何RTL Delphi函数来确定字符串中最后一个字符出现的位置?尝试作为SysUtils单元一部分的函数。RRUZ回答了实际问题(他给了您一个RTL函数) 尽管如此,我还是忍不住要给出一个简单的代码片段来满足您的需求: function LastCharPos(const S: string; const Chr: char): integer; var i: Integer; begin result := 0; for i := length(S) downto 1 d

是否存在任何RTL Delphi函数来确定字符串中最后一个字符出现的位置?

尝试作为SysUtils单元一部分的函数。

RRUZ回答了实际问题(他给了您一个RTL函数)

尽管如此,我还是忍不住要给出一个简单的代码片段来满足您的需求:

function LastCharPos(const S: string; const Chr: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := length(S) downto 1 do
    if S[i] = Chr then
      Exit(i);
end;
由于这正是您想要的,并且不提供任何其他功能,因此它更加紧凑(特别是当我们使用Delphi2009及更高版本的
Exit(Result)
语法时),并且可能会稍微快一点。然而,在Delphi2007中,您必须

function LastCharPos(const S: string; const Chr: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := length(S) downto 1 do
    if S[i] = Chr then
    begin
      result := i;
      break; // or Exit; if you prefer that
    end;
end;
在SysUtils单元中使用或。后者,尽管名称不同,但在Delphi版本中,
string
UnicodeString
时,它可以处理Unicode字符。(如果您仍然需要“真实”Ansi版本,请使用AnsiStrings单元。)


这些函数只搜索一个字符,鉴于
lastdimiter
从给定的可能性列表中搜索多个字符中的任意一个,请将
StrRScan
视为
lastdimiter
为一个字符
定界符
参数进行了优化。

以下是我为查找子字符串在绳子

function GetPositionOfNthOccurence(sSubStr, sStr: string; iNth: integer): integer;
var
  sTempStr: string;
  iIteration: integer;
  iTempPos: integer;
  iTempResult: integer;
begin
  result := 0;

  // validate input parameters
  if ((iNth < 1) or (sSubStr = '') or (sStr = '')) then exit;

  // evaluate
  iIteration := 0;
  iTempResult := 0;
  sTempStr := sStr;
  while (iIteration < iNth) do
  begin
    iTempPos := Pos(sSubStr, sTempStr);
    if (iTempPos = 0) then exit;
    iTempResult := iTempResult + iTempPos;
    sTempStr := Copy(sStr, iTempResult + 1, Length(sStr) - iTempResult);
    inc(iIteration);
  end;
  result := iTempResult;
end;
函数getPositionOfNotoccurence(sSubStr,sStr:string;iNth:integer):integer; 变量 sTempStr:字符串; 迭代:整数; itempos:整数; iTempResult:整数; 开始 结果:=0; //验证输入参数 如果((iNth<1)或(sSubStr='')或(sStr=''),则退出; //评估 迭代:=0; iTempResult:=0; sTempStr:=sStr; 而(迭代最好的跨平台解决方案是,它自Delphi XE4以来就存在


请注意,此函数是基于0的。

System.SysUtils.TStringHelper.LastIndexOf在需要字符串而不是字符时也很方便。非常好,因为使用此代码还可以确定字符串中子字符串的出现数量。这给我解决了一个麻烦!谢谢你的贡献。