用于查找单词是否为前缀的c ++函数

Vai*_*orn 2 c++ stl function prefixes

假设我有一些单词AB,AAB,AA.

AB不是AAB的前缀,但AA是AAB的前缀,因为如果我只是在AA的末尾添加B,它将变为AAB,这对于AB是不可能的.

那么,在c ++(STL)中是否有任何函数,以便我可以确定两个单词,如果一个是另一个的前缀?

谢谢.

小智 9

template<class C, class T, class A>
bool starts_with(std::basic_string<C,T,A> const& haystack,
                 std::basic_string<C,T,A> const& needle)
{
  return needle.length() <= haystack.length() &&
    std::equal(needle.begin(), needle.end(), haystack.begin());
}
Run Code Online (Sandbox Code Playgroud)

请注意,长度检查不是过早优化,需要满足std :: equal的前提条件.

  • +1此解决方案不必创建第二个子字符串,并且不会花费时间在字符串开头之外的任何地方查找匹配项. (3认同)

小智 5

std::string full = "AAB", pre= "AA";
bool prefixed = full.find( pre ) == 0;
Run Code Online (Sandbox Code Playgroud)

或者呢:

bool prefixed =  full.compare( 0, pre.size(), pre ) == 0;
Run Code Online (Sandbox Code Playgroud)