Pascal substr 等价

问题描述 投票:0回答:4

我正在寻找(例如)php 的 substr 函数的 Pascal 等效函数,其工作原理如下:

$new_string = substr('abcdef', 1, 3);  // returns 'bcd'

我已经找到了它,但我总是花很长时间才能找到它,所以我将答案发布给像我这样的其他人,以便能够轻松找到它。

substring pascal substr
4个回答
22
投票

您可以使用功能复制。语法如下:

copy(string, start, length);

Pascal 中的字符串似乎是从 1 开始索引的,因此如下:

s1 := 'abcdef';
s2 := copy(s1, 2, 3);

将导致 s2 == 'bcd'.

希望这对某人有帮助。


0
投票

Freepascal还有复制功能:

T:='1234567';
S:=Copy (T,1,2);   { S:='12'   }
S:=Copy (T,4,2);   { S:='45'   }
S:=Copy (T,4,8);   { S:='4567' }

我建议您查看Lazarus IDE


0
投票

Pascal 没有 PHP 的

substr
函数的 1:1 内置等效函数。

  • 如果

    • sample
      是一个非空字符串,
    • offset
      是非负数,并且
    • offset
      小于或等于
      length(sample)

    PHP 调用

    substr(sample, offset)
    

    相当于

    subStr(sample, offset + 1)
    

    请注意,Pascal 中的字符串索引是从 1 开始的,因此从 PHP 翻译时会出现

    +1

  • 如果

    • offset
      是非负数,
    • offset
      小于或等于
      length(sample)
    • length
      是非负数,并且
    • offset + length
      小于或等于
      length(sample)

    PHP 调用

    substr(sample, offset, length)
    

    相当于

    subStr(sample, offset + 1, length)
    

    请注意,在这种情况下允许使用空的

    sample
    字符串。

  • 除非如果

    • sample
      是指定为
      bindable
      的字符串变量,或者赋予值
      ''
      (空字符串),或者
    • length
      是非正数

    subStr

    三元
    调用可以替换为

    sample[offset + 1 .. offset + length]
    

    受到相同的约束(即索引和所有内容都必须有效)。

  • 对于所有其他情况,您需要定义自己的包装器

    function
    类似于 user5240584 已经发布的内容

subStr
函数已在 ISO 标准 10206“扩展 Pascal”中进行标准化。 另一方面,
copy
函数是 UCSD Pascal 的非标准化扩展,已被 Borland Pascal(Turbo Pascal、Delphi)、FreePascal 和许多其他 Pascal 方言采用。


-1
投票
    function substring(s: string; a, b: integer): string;
    var len: integer;
      procedure swap(var a, b: integer);
      var temp: integer;
      begin
        temp:= a;
        a:= b;
        b:= temp;
      end;
    begin
      if (a > b) then
        swap(a, b);
      len:= length(s);
      if ((len = 0) or ((a < 1) and (b < 1)) or 
          ((a > len) and (b > len))) then
      begin
        substring:= '';
      end
      else
      begin
        if (a < 1) then
          a:= 1;
        if (b > len) then
          b:= len;
        substring:= copy(s, a, b);
      end;
    end;
© www.soinside.com 2019 - 2024. All rights reserved.