我需要检查是否一个std:字符串“XYZ”开始。如何做到这一点,而无需通过整个字符串搜索或者创建拥有SUBSTR临时字符串()。

有帮助吗?

解决方案

我会用比较方法:

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

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

其他提示

这可能更符合标准库的精神将定义自己的BEGINS_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());
}

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

查找到Boost的字符串ALGO 库,具有许多有用的功能,如STARTS_WITH,istart_with(不区分大小写),等等。如果你想使用Boost库中的一部分在你的项目,那么你可以使用bcp实用程序只复制所需的文件

似乎的std :: string :: STARTS_WITH是内部C ++ 20,同时的std :: string ::寻找可用于

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

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

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

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top