std :: string比较(检查字符串是否以另一个字符串开头)

时间:2009-05-31 10:44:15

标签: c++ string stl compare

我需要检查std:string是否以“xyz”开头。如何在不搜索整个字符串或使用substr()创建临时字符串的情况下执行此操作。

5 个答案:

答案 0 :(得分:161)

我会使用比较方法:

std::string s("xyzblahblah");
std::string t("xyz")

if (s.compare(0, t.length(), t) == 0)
{
// ok
}

答案 1 :(得分:13)

可能更符合标准库精神的方法是定义自己的begin_with算法。

#include <algorithm>
using namespace std;


template<class TContainer>
bool begins_with(const TContainer& input, const TContainer& match)
{
    return input.size() >= match.size()
        && equal(match.begin(), match.end(), input.begin());
}

这为客户端代码提供了一个更简单的接口,并且与大多数标准库容器兼容。

答案 2 :(得分:10)

查看Boost的String Algo库,它有许多有用的函数,例如starts_with,istart_with(不区分大小写)等。如果你只想在项目中使用部分boost库,那么你可以使用bcp实用程序仅复制所需的文件

答案 3 :(得分:2)

似乎std :: string :: starts_with在C ++ 20内,同时可以使用std :: string :: find

std::string s1("xyzblahblah");
std::string s2("xyz")

if (s1.find(s2) == 0)
{
   // ok, s1 starts with s2
}

答案 4 :(得分:0)

我觉得我不完全理解你的问题。它看起来应该是微不足道的:

s[0]=='x' && s[1]=='y' && s[2]=='z'

这仅查看(最多)前三个字符。编译时未知的字符串的泛化需要您用循环替换上面的内容:

// look for t at the start of s
for (int i=0; i<s.length(); i++)
{
  if (s[i]!=t[i])
    return false;
}