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