C++ 檢查一個字符串是否是另一個的前綴


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());
}

link


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM