2009-05-31 139 views

回答

139

我会用比较方法:

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

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

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

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

那么,我知道如何比较使用C函数的字符串。我的问题是通过C++ STL来实现面向对象的方式。 – jackhab 2009-05-31 11:01:58

+0

这里没有使用C函数。而标准图书馆并不排除你写自己的行为。 – 2009-05-31 11:05:06

+5

如果t比s短,该怎么办? – vidstige 2013-01-22 14:00:58

8

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

11

的方法那可能更多保持标准库的精神将是定义你自己的starts_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()); 
} 

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

相关问题