una separar reemplazar por funcion eliminar contar comparar caracteres caracter cadenas cadena string delphi delphi-2007

string - separar - reemplazar caracteres en python



Encuentra la Ășltima ocurrencia de char en una cadena (5)

La mejor solución multiplataforma es TStringHelper.LastIndexOf , existe desde Delphi XE4.

Tenga en cuenta que esta función está basada en 0.

¿Existe alguna función RTL Delphi para determinar la posición de la última aparición de un carácter en una cadena?


RRUZ respondió la pregunta real (le dio una función de RTL).

Aún así, no me puedo resistir a dar un simple fragmento de código que hace lo que quiere:

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;

Dado que esto hace exactamente lo que usted desea y no ofrece otras características, es mucho más compacto (especialmente cuando usamos la sintaxis de Exit(Result) de Delphi 2009 y posterior) y probablemente un poco más rápido. En Delphi 2007, sin embargo, tienes que hacer

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;


Use StrRScan o AnsiStrRScan , ambos en la unidad SysUtils . Este último, a pesar de su nombre, funciona en caracteres Unicode en las versiones de Delphi donde string es UnicodeString . (Si aún necesita la versión Ansi "real", use la unidad AnsiStrings ).

Estas funciones buscan exactamente un carácter, mientras que LastDelimiter busca cualquiera de varios caracteres de la lista de posibilidades dada: piense en StrRScan como LastDelimiter optimizado para un argumento de Delimiters un carácter.


Y aquí está mi contribución para encontrar la posición de la enésima aparición de una subcadena dentro de una cadena.

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;


prueba la función LastDelimiter , que es parte de la unidad SysUtils.