D语言BetterC模式中如何实现strstri函数?

在D语言的BetterC模式中,没有提供标准库中的strstri函数。但是可以通过自定义函数来实现字符串的匹配功能。

以下是两种实现方式:

1. 使用循环遍历字符串

import core.stdc.string;

@nogc nothrow
char* strstri(const char* haystack, const char* needle) {
    if (!haystack || !needle) {
        return null;
    }

    size_t haystackLen = strlen(haystack);
    size_t needleLen = strlen(needle);

    for (size_t i = 0; i <= haystackLen - needleLen; i++) {
        size_t j;
        for (j = 0; j < needleLen; j++) {
            if (tolower(haystack[i + j]) != tolower(needle[j])) {
                break;
            }
        }
        if (j == needleLen) {
            return cast(char*)(haystack + i);
        }
    }

    return null;
}

2. 使用D语言的std.algorithm中的canFind函数

import std.algorithm;

@nogc nothrow
char* strstri(const char* haystack, const char* needle) {
    if (!haystack || !needle) {
        return null;
    }

    return cast(char*)(haystack.canFind(needle, (a, b) => toLower(a) == toLower(b)));
}

以上两种方法都可以实现strstri函数的功能,你可以根据自己的需要选择合适的方法。

D语言BetterC模式中如何实现strstri函数?

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

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