檢查字串是否是另一個字串的字首

Version >= C++ 14

在 C++ 14 中,這很容易通過 std::mismatch 完成,它返回兩個範圍內的第一個不匹配對:

std::string prefix = "foo";
std::string string = "foobar";

bool isPrefix = std::mismatch(prefix.begin(), prefix.end(),
    string.begin(), string.end()).first == prefix.end();

請注意,在 C++ 14 之前存在一個範圍半的 mismatch() 版本,但是如果第二個字串是兩個中較短的一個,則這是不安全的。

Version < C++ 14

我們仍然可以使用 std::mismatch() 的範圍半版本,但我們需要先檢查第一個字串是否與第二個字串一樣大:

bool isPrefix = prefix.size() <= string.size() &&
    std::mismatch(prefix.begin(), prefix.end(),
        string.begin(), string.end()).first == prefix.end();

Version >= C++ 17

使用 std::string_view,我們可以編寫我們想要的直接比較,而無需擔心分配開銷或製作副本:

bool isPrefix(std::string_view prefix, std::string_view full)
{
    return prefix == full.substr(0, prefix.size());
}