檢查字串是否是另一個字串的字首
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());
}