以下是基于 Dlang 语言原生实现的 sub_str 函数,支持 start 和 length 参数的负数输入,同时考虑了边界问题,可以直接运行:

import std.stdio;

string sub_str(string input, long start, long length = -1)
{
    // 处理 start 参数,负数表示从末尾开始截取
    if (start < 0) {
        start = input.length + start;
        if (start < 0) start = 0;
    }

    // 处理 length 参数,负数表示截取至末尾倒数第几个字符
    if (length < 0) {
        length = input.length + length - start;
        if (length < 0) length = 0;
    }

    // 处理边界问题,防止越界
    if (start + length > input.length) {
        length = input.length - start;
    }

    return input[start .. start + length];
}

void main()
{
    // 测试
    string input = 'hello world';
    writeln(sub_str(input, 6, 5)); // 输出 'world'
    writeln(sub_str(input, -5, 3)); // 输出 'wor'
    writeln(sub_str(input, -5)); // 输出 'world'
}

该函数支持以下特性:

  • start 为负数: 表示从字符串末尾开始截取,例如 -5 表示从末尾第五个字符开始截取。
  • length 为负数: 表示截取至末尾倒数第几个字符,例如 -1 表示截取至字符串末尾,-3 表示截取至倒数第三个字符。
  • 边界处理: 防止越界,保证截取的字符范围在字符串长度之内。

通过以上功能,该函数能够有效地实现类似 PHP 的 sub_str 函数的功能。

Dlang 实现类似 PHP sub_str 函数 - 支持负数参数和边界处理

原文地址: https://www.cveoy.top/t/topic/oddZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录