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

我需要检查一个std:string是否以“xyz”开头。 我怎么做,而不search整个string或使用substr()创build临时string。

我会用比较的方法:

std::string s("xyzblahblah"); std::string t("xyz") if (s.compare(0, t.length(), t) == 0) { // ok } 

一个可能更符合标准库精神的方法是定义你自己的starts_withalgorithm。

 #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的stringAlgo库,它有许多有用的function,例如starts_with,istart_with(不区分大小写)等。如果您只想在项目中使用部分boost库,则可以使用bcp实用程序只需要文件

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

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

这只看(最多)前三个字符。 对于在编译时未知的string的泛化将需要用循环replace上面的代码:

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