C ++ 14
假設字符串分別為:
std::string prefix = "foo";
std::string string = "foobar";
在C ++ 14中,通過std::mismatch返回兩個范圍中的第一個不匹配對很容易做到:
bool isPrefix = std::mismatch(prefix.begin(), prefix.end(),
string.begin(), string.end()).first == prefix.end();
請注意,mismatch()C ++ 14之前存在一個范圍一半的版本,但這在第二個字符串是兩者中較短的字符串的情況下是不安全的。
我們仍然可以使用的范圍和一半的版本,但是我們需要首先檢查第一個字符串是否與第二個字符串一樣大:std::mismatch()
bool isPrefix = prefix.size() <= string.size() &&
std::mismatch(prefix.begin(), prefix.end(),
string.begin(), string.end()).first == prefix.end();
C ++ 17
使用std::string_view,我們可以編寫所需的直接比較,而不必擔心分配開銷或制作副本:
bool isPrefix(std::string_view prefix, std::string_view full)
{
return prefix == full.substr(0, prefix.size());
}