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 德尔菲10。函数复制字符,直到该字符';:';_String_Delphi - Fatal编程技术网

String 德尔菲10。函数复制字符,直到该字符';:';

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

大家好,我想做一个函数,停止并复制字符串,直到第一个字符“:”满足。 我有以下字符串“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 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
-method
TJclWideStrings.ExtractName
:。但它们都没有
n
参数。