如果你想知道一个字符串是否以另一个字符串开头,你会如何在C++ / STL中实现?在Java中有String.startsWith
,Python也有string.startwith
,STL没有直接的方法。相反,有std::string :: find
和std::string :: compare
方法。到目前为止,我使用了两种方法,主要取决于我的当前心情:
if ( str1.compare( 0, str2.length(), str2 ) == 0 )
do_something();
if ( str1.find(str2) == 0 )
do_something();
当然,你也可以这样做:str.substr(0,str2.length()) == str2
,可能还有其他方式可以实现相同的功能。与compare
相比,find
更方便,但我看到更多的人推荐使用compare
而不是find
。但是哪种方法更受青睐?是否存在性能差异?是否取决于实现(GCC、VC++等)?
starts_with
гҖӮеҗҰеҲҷпјҢеҰӮжһңжҲ‘зҹҘйҒ“str1жҖ»жҳҜжҜ”str2еӨ§пјҢдҪҶдёҚдјҡеӨӘеӨ§пјҢйӮЈд№Ҳfind
е’Ңcompare
д№ҹеҸҜд»ҘгҖӮеҜ№еҗ—пјҹ - craeshfind
或者compare
都可以给出正确的答案,所以两者都可以。在许多情况下,字符串额外遍历一次是可以忽略不计的。 - Steve Jessopc_str()
进行复制 - 通常它们会在原地以空字符结尾字符串数据。当然,我不会依赖c_str
不进行拷贝,这也是标准库中最接近的strncmp
令人失望的原因之一。但我认为这不会在实践中使检查变得昂贵,只是从理论上来说可能会变得昂贵。 - Steve Jessop