String 德尔菲10。函数复制字符,直到该字符';:';
大家好,我想做一个函数,停止并复制字符串,直到第一个字符“:”满足。 我有以下字符串“404:Bad Request”,输出为“404:”,但我只想要“404”。这是我的代码:String 德尔菲10。函数复制字符,直到该字符';:';,string,delphi,String,Delphi,大家好,我想做一个函数,停止并复制字符串,直到第一个字符“:”满足。 我有以下字符串“404:Bad Request”,输出为“404:”,但我只想要“404”。这是我的代码: 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 t
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;
似乎您的函数旨在将字符串返回到第n个冒号,这与您在描述中所说的相反:。。。直到满足第一个字符“:”为止 但是,代码的一个问题是,
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;
n:integer
参数的用途是什么?你没有说什么。如果你使用的是Pos(),为什么还要使用for
循环逐字符遍历字符串?如果您了解字符串处理,对我来说似乎毫无意义。请查看TStrings
类中ExtractName
方法的实现:。它确实返回分隔符之前的部分。类似的函数也用于JCL
-methodTJclWideStrings.ExtractName
:。但它们都没有n
参数。