如何检查C ++中的string开始
在C ++中有没有办法检查一个string是否以某个string开始(小于原始string)? 就像我们可以用Java做的一样
bigString.startswith(smallString);
std::string s("Hello world"); if (s.find("Hello") == 0) { std::cout << "String starts with Hello\n"; }
你可以用string::compare()
来做到这一点,它提供了比较两个string的全部或部分的各种选项。 此版本将smallString
与bigString
的适当大小前缀进行比较(如果bigString
比smallString
短,则工作正常):
bigString.compare(0, smallString.length(), smallString)
我倾向于把它包装在一个名为startsWith()
的自由函数中,否则它看起来有点神秘。
使用string::find()
或者string::substr()
方法不是最优的,因为它们要么复制你的string,要么在string的开头search多个匹配项。 这可能不是一个问题,但如果是你可以使用std::equal
algorithm。 请记住检查“干草堆”是否至less与“针”一样长。
#include <string> using namespace std; bool startsWith(const string& haystack, const string& needle) { return needle.length() <= haystack.length() && equal(needle.begin(), needle.end(), haystack.begin()); }
一如既往,正确的解决scheme来自Boost: boost::algorithm::starts_with
。
优化一点:
if ( smallString.size() <= bigString.size() && strncmp( smallString.c_str(), bigString.c_str(), smallString.length() ) == 0 ) dont forget to #include <cstring> // or <string.h>
最简单的方法是:
if ( smallString.size() <= bigString.size() && std::equals( smallString.begin(), smallString.end(), bigString.end() )
(如果两者中的一个或者两个都是向量,或者其他标准的容器types,这也是可行的。)
strstr()
返回一个指向string中第一个string的指针。
我认为这是有道理的发布一个原始的解决scheme,不使用任何库函数…
// Checks whether `str' starts with `start' bool startsWith(const std::string& str, const std::string& start) { if (&start == &str) return true; // str and start are the same string if (start.length() > str.length()) return false; for (size_t i = 0; i < start.length(); ++i) { if (start[i] != str[i]) return false; } return true; }
添加一个简单的std::tolower
可以使这个case不敏感
// Checks whether `str' starts with `start' ignoring case bool startsWithIgnoreCase(const std::string& str, const std::string& start) { if (&start == &str) return true; // str and start are the same string if (start.length() > str.length()) return false; for (size_t i = 0; i < start.length(); ++i) { if (std::tolower(start[i]) != std::tolower(str[i])) return false; } return true; }
我很惊讶没有人发布这种方法呢:
#include <string> using namespace std; bool starts_with(const string& smaller_string, const string& bigger_string) { return (smaller_string == bigger_string.substr(0,smaller_string.length())); }
创build一个子string,它是你的smallString
variables的长度,然后比较这两个string。 或者search子stringsmallString
并查看它是否返回索引0
http://www.cplusplus.com/reference/string/string/substr/
你可以使用string.substr()来查看任意位置的任意数量的字符,或者你可以使用一个string.find()成员。